Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
convert svn logs into ChangeLog (up to r7858 for now)
[simgrid.git] / tools / tesh2 / src / units.c
1 #include <units.h>\r
2 #include <unit.h>\r
3 #include <fstreams.h>\r
4 \r XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
5 \r\runits_t \r units_new(runner_t runner, fstreams_t fstreams) \r
6 {
7   \rfstream_t fstream;
8   \runsigned int i;
9   \runit_t unit;
10   \r\runits_t units = xbt_new0(s_units_t, 1);
11   \r\runits->items =
12       xbt_dynar_new(sizeof(unit_t), (void_f_pvoid_t) unit_free);
13   \r\rxbt_dynar_foreach(fstreams->items, i, fstream) \r {
14     \runit = unit_new(runner, NULL, NULL, fstream);
15     \rxbt_dynar_push(units->items, &unit);
16   \r}
17   \r\rreturn units;
18 \r}
19
20 \r\r\rint \r units_is_empty(units_t units) \r
21 {
22   \rif (!units)
23     \r {
24     \rerrno = EINVAL;
25     \rreturn 0;
26     \r}
27   \r\rreturn (0 == xbt_dynar_length(units->items));
28 \r}
29
30 \r\rint \r units_get_size(units_t units) \r
31 {
32   \rif (!units)
33     \r {
34     \rerrno = EINVAL;
35     \rreturn -1;
36     \r}
37   \r\rreturn xbt_dynar_length(units->items);
38 \r}
39
40 \r\r\rint \r units_run_all(units_t units, xbt_os_mutex_t mutex) \r
41 {
42   \runit_t unit;
43   \runsigned int i;
44   \r\rif (!units)
45     \rreturn EINVAL;
46   \r\rif (!xbt_dynar_length(units->items))
47     \rreturn EAGAIN;
48   \r\rxbt_dynar_foreach(units->items, i, unit) \r {
49     \rxbt_os_sem_acquire(jobs_sem);
50     \runit_run(unit, mutex);
51   \r}
52   \r\rreturn 0;
53 \r}
54
55 \r\rint \r units_join_all(units_t units) \r
56 {
57   \runit_t unit;
58   \runsigned int i;
59   \r\rif (!units)
60     \rreturn EINVAL;
61   \r\rif (!xbt_dynar_length(units->items))
62     \rreturn EAGAIN;
63   \r\rxbt_dynar_foreach(units->items, i, unit) \r {
64     \rif (unit->thread)
65       \rxbt_os_thread_join(unit->thread, NULL);
66   \r}
67   \r\rreturn 0;
68 \r}
69
70 \r\rint \r units_interrupt_all(units_t units) \r
71 {
72   \runit_t unit;
73   \runsigned int i;
74   \r\rif (!units)
75     \rreturn EINVAL;
76   \r\rif (!xbt_dynar_length(units->items))
77     \rreturn EAGAIN;
78   \r\rxbt_dynar_foreach(units->items, i, unit) \r {
79     \rif (!(unit->successeded) && !(unit->interrupted))
80       \runit_interrupt(unit);
81     \r
82     else
83       \r {
84       \rif (!unit->released && unit->sem)
85         \r {
86         \runit->released = 1;
87         \rxbt_os_sem_release(unit->sem);
88         \r}
89       \r}
90   \r\r}
91   \r\rreturn 0;
92 \r}
93
94 \r\rint \r units_summuarize(units_t units) \r
95 {
96   \runit_t unit;
97   \runsigned int i;
98   \r\rif (!units)
99     \rreturn EINVAL;
100   \r\rif (!xbt_dynar_length(units->items))
101     \rreturn EAGAIN;
102   \r\rxbt_dynar_foreach(units->items, i, unit) \r {
103     \runit_summuarize(unit);
104   \r}
105   \r\rreturn 0;
106 \r\r}
107
108 \r\rint \r units_reset_all(units_t units) \r
109 {
110   \runit_t unit;
111   \runsigned int i;
112   \r\rif (!units)
113     \rreturn EINVAL;
114   \r\rif (!xbt_dynar_length(units->items))
115     \rreturn EAGAIN;
116   \r\rxbt_dynar_foreach(units->items, i, unit) \r {
117     \runit_reset(unit);
118   \r}
119   \rreturn 0;
120 \r}
121
122 \r\rint \r units_free(void **unitsptr) \r
123 {
124   \rif (!(*unitsptr))
125     \rreturn EINVAL;
126   \r\rif ((*((units_t *) unitsptr))->items)
127     \rxbt_dynar_free(&((*((units_t *) unitsptr))->items));
128   \r\rfree(*unitsptr);
129   \r*unitsptr = NULL;
130   \r\rreturn 0;
131 \r}
132
133 \r\r