#include <units.h>\r
#include <unit.h>\r
#include <fstreams.h>\r
-\r
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
-\r
-units_t\r
-units_new(runner_t runner, fstreams_t fstreams)\r
-{\r
- fstream_t fstream;\r
- unsigned int i;\r
- unit_t unit;\r
- \r
- units_t units = xbt_new0(s_units_t, 1);\r
-\r
- units->items = xbt_dynar_new(sizeof(unit_t), (void_f_pvoid_t)unit_free);\r
-\r
- xbt_dynar_foreach(fstreams->items, i, fstream)\r
- {\r
- unit = unit_new(runner, NULL, NULL, fstream);\r
- xbt_dynar_push(units->items, &unit);\r
- }\r
- \r
- return units;\r
-}\r
-\r
-\r
-int\r
-units_is_empty(units_t units)\r
-{\r
- if(!units)\r
- {\r
- errno = EINVAL;\r
- return 0;\r
- }\r
- \r
- return (0 == xbt_dynar_length(units->items));\r
-}\r
-\r
-int\r
-units_get_size(units_t units)\r
-{\r
- if(!units)\r
- {\r
- errno = EINVAL;\r
- return -1;\r
- }\r
-\r
- return xbt_dynar_length(units->items);\r
-}\r
-\r
-\r
-int\r
-units_run_all(units_t units, xbt_os_mutex_t mutex)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
- \r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- unit_run(unit, mutex);\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int\r
-units_join_all(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
- \r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- if(unit->thread)\r
- xbt_os_thread_join(unit->thread, NULL);\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int\r
-units_interrupt_all(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
-\r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- if(!(unit->successeded) && !(unit->interrupted))\r
- unit_interrupt(unit);\r
- }\r
- \r
- return 0;\r
-}\r
-\r
-int\r
-units_summuarize(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
-\r
- if(!units)\r
- return EINVAL;\r
-\r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- unit_summuarize(unit);\r
- }\r
- \r
- return 0;\r
- \r
-}\r
-\r
-int\r
-units_reset_all(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
- \r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- unit_reset(unit);\r
- }\r
- return 0;\r
-}\r
-\r
-int\r
-units_free(void** unitsptr)\r
-{\r
- if(!(*unitsptr))\r
- return EINVAL;\r
-\r
- xbt_dynar_free(&((*((units_t*)unitsptr))->items));\r
- \r
- free(*unitsptr);\r
- *unitsptr = NULL;\r
- \r
- return 0;\r
-}\r
-\r
+\r XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
+\r\runits_t \r units_new(runner_t runner, fstreams_t fstreams) \r
+{
+ \rfstream_t fstream;
+ \runsigned int i;
+ \runit_t unit;
+ \r\runits_t units = xbt_new0(s_units_t, 1);
+ \r\runits->items =
+ xbt_dynar_new(sizeof(unit_t), (void_f_pvoid_t) unit_free);
+ \r\rxbt_dynar_foreach(fstreams->items, i, fstream) \r {
+ \runit = unit_new(runner, NULL, NULL, fstream);
+ \rxbt_dynar_push(units->items, &unit);
+ \r}
+ \r\rreturn units;
+\r}
+
+\r\r\rint \r units_is_empty(units_t units) \r
+{
+ \rif (!units)
+ \r {
+ \rerrno = EINVAL;
+ \rreturn 0;
+ \r}
+ \r\rreturn (0 == xbt_dynar_length(units->items));
+\r}
+
+\r\rint \r units_get_size(units_t units) \r
+{
+ \rif (!units)
+ \r {
+ \rerrno = EINVAL;
+ \rreturn -1;
+ \r}
+ \r\rreturn xbt_dynar_length(units->items);
+\r}
+
+\r\r\rint \r units_run_all(units_t units, xbt_os_mutex_t mutex) \r
+{
+ \runit_t unit;
+ \runsigned int i;
+ \r\rif (!units)
+ \rreturn EINVAL;
+ \r\rif (!xbt_dynar_length(units->items))
+ \rreturn EAGAIN;
+ \r\rxbt_dynar_foreach(units->items, i, unit) \r {
+ \rxbt_os_sem_acquire(jobs_sem);
+ \runit_run(unit, mutex);
+ \r}
+ \r\rreturn 0;
+\r}
+
+\r\rint \r units_join_all(units_t units) \r
+{
+ \runit_t unit;
+ \runsigned int i;
+ \r\rif (!units)
+ \rreturn EINVAL;
+ \r\rif (!xbt_dynar_length(units->items))
+ \rreturn EAGAIN;
+ \r\rxbt_dynar_foreach(units->items, i, unit) \r {
+ \rif (unit->thread)
+ \rxbt_os_thread_join(unit->thread, NULL);
+ \r}
+ \r\rreturn 0;
+\r}
+
+\r\rint \r units_interrupt_all(units_t units) \r
+{
+ \runit_t unit;
+ \runsigned int i;
+ \r\rif (!units)
+ \rreturn EINVAL;
+ \r\rif (!xbt_dynar_length(units->items))
+ \rreturn EAGAIN;
+ \r\rxbt_dynar_foreach(units->items, i, unit) \r {
+ \rif (!(unit->successeded) && !(unit->interrupted))
+ \runit_interrupt(unit);
+ \r
+ else
+ \r {
+ \rif (!unit->released && unit->sem)
+ \r {
+ \runit->released = 1;
+ \rxbt_os_sem_release(unit->sem);
+ \r}
+ \r}
+ \r\r}
+ \r\rreturn 0;
+\r}
+
+\r\rint \r units_summuarize(units_t units) \r
+{
+ \runit_t unit;
+ \runsigned int i;
+ \r\rif (!units)
+ \rreturn EINVAL;
+ \r\rif (!xbt_dynar_length(units->items))
+ \rreturn EAGAIN;
+ \r\rxbt_dynar_foreach(units->items, i, unit) \r {
+ \runit_summuarize(unit);
+ \r}
+ \r\rreturn 0;
+\r\r}
+
+\r\rint \r units_reset_all(units_t units) \r
+{
+ \runit_t unit;
+ \runsigned int i;
+ \r\rif (!units)
+ \rreturn EINVAL;
+ \r\rif (!xbt_dynar_length(units->items))
+ \rreturn EAGAIN;
+ \r\rxbt_dynar_foreach(units->items, i, unit) \r {
+ \runit_reset(unit);
+ \r}
+ \rreturn 0;
+\r}
+
+\r\rint \r units_free(void **unitsptr) \r
+{
+ \rif (!(*unitsptr))
+ \rreturn EINVAL;
+ \r\rif ((*((units_t *) unitsptr))->items)
+ \rxbt_dynar_free(&((*((units_t *) unitsptr))->items));
+ \r\rfree(*unitsptr);
+ \r*unitsptr = NULL;
+ \r\rreturn 0;
+\r}
+
+\r\r