Changeset 03daabd in mainline for uspace/srv/sysman
- Timestamp:
- 2019-10-06T19:47:36Z (6 years ago)
- Children:
- 5be6361
- Parents:
- 9559cf8
- git-author:
- Matthieu Riolo <matthieu.riolo@…> (2019-09-17 07:50:03)
- git-committer:
- Matthieu Riolo <matthieu.riolo@…> (2019-10-06 19:47:36)
- Location:
- uspace/srv/sysman
- Files:
-
- 7 edited
-
job.c (modified) (3 diffs)
-
job.h (modified) (2 diffs)
-
job_closure.c (modified) (7 diffs)
-
job_closure.h (modified) (2 diffs)
-
job_queue.c (modified) (6 diffs)
-
sysman.c (modified) (2 diffs)
-
test/job_closure.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/sysman/job.c
r9559cf8 r03daabd 70 70 job->unit = u; 71 71 72 dyn_array_initialize(&job->blocked_jobs, job_t *);72 array_initialize(&job->blocked_jobs, job_t *); 73 73 job->blocking_jobs = 0; 74 74 job->blocking_job_failed = false; … … 120 120 assert(!link_used(&job->job_queue)); 121 121 122 dyn_array_foreach(job->blocked_jobs, job_t *, job_it) {122 array_foreach(job->blocked_jobs, job_t *, job_it) { 123 123 job_del_ref(&(*job_it)); 124 124 } 125 dyn_array_destroy(&job->blocked_jobs);125 array_destroy(&job->blocked_jobs); 126 126 127 127 free(job); … … 257 257 /* First remove references, then clear the array */ 258 258 assert(job->blocked_jobs.size == job->blocked_jobs_count); 259 dyn_array_foreach(job->blocked_jobs, job_t *, job_it) {259 array_foreach(job->blocked_jobs, job_t *, job_it) { 260 260 job_unblock(*job_it, job); 261 261 } 262 dyn_array_clear(&job->blocked_jobs);262 array_clear(&job->blocked_jobs); 263 263 264 264 /* Add reference for event handler */ -
uspace/srv/sysman/job.h
r9559cf8 r03daabd 30 30 #define SYSMAN_JOB_H 31 31 32 #include <adt/ dyn_array.h>32 #include <adt/array.h> 33 33 #include <adt/list.h> 34 34 #include <stdatomic.h> … … 64 64 65 65 /** Jobs that this job is preventing from running */ 66 dyn_array_t blocked_jobs;66 array_t blocked_jobs; 67 67 /** 68 68 * No. of jobs that the job is actually blocking (may differ from size -
uspace/srv/sysman/job_closure.c
r9559cf8 r03daabd 66 66 blocking_job->blocked_jobs_count); 67 67 68 errno_t rc = dyn_array_append(&blocking_job->blocked_jobs, job_t *,68 errno_t rc = array_append(&blocking_job->blocked_jobs, job_t *, 69 69 blocked_job); 70 70 if (rc != EOK) { … … 97 97 goto finish; 98 98 } 99 job_t *first_job = dyn_array_last(closure, job_t *);99 job_t *first_job = array_last(closure, job_t *); 100 100 101 101 job_add_ref(first_job); … … 119 119 120 120 /* Pass job reference to closure and add one for unit */ 121 rc = dyn_array_append(closure, job_t *, created_job);121 rc = array_append(closure, job_t *, created_job); 122 122 if (rc != EOK) { 123 123 goto finish; … … 165 165 166 166 /* Pass job reference to closure and add one for unit */ 167 rc = dyn_array_append(closure, job_t *, created_job);167 rc = array_append(closure, job_t *, created_job); 168 168 if (rc != EOK) { 169 169 goto finish; … … 308 308 } 309 309 310 errno_t rc = dyn_array_append(job_closure, job_t *, main_job);310 errno_t rc = array_append(job_closure, job_t *, main_job); 311 311 if (rc != EOK) { 312 312 return rc; … … 343 343 344 344 if (rc == EOK) { 345 dyn_array_foreach(*job_closure, job_t *, job_it) {345 array_foreach(*job_closure, job_t *, job_it) { 346 346 sysman_log(LVL_DEBUG2, "%s\t%s, refs: %u", __func__, 347 347 unit_name((*job_it)->unit), atomic_load(&(*job_it)->refcnt)); … … 350 350 351 351 /* Clean after ourselves (BFS tag jobs) */ 352 dyn_array_foreach(*job_closure, job_t *, job_it) {352 array_foreach(*job_closure, job_t *, job_it) { 353 353 job_t *j = (*job_it)->unit->bfs_data; 354 354 assert(*job_it == j); -
uspace/srv/sysman/job_closure.h
r9559cf8 r03daabd 30 30 #define SYSMAN_JOB_CLOSURE_H 31 31 32 #include <adt/ dyn_array.h>32 #include <adt/array.h> 33 33 34 34 #include "job.h" … … 36 36 #define CLOSURE_ISOLATE 0x1 37 37 38 typedef dyn_array_t job_closure_t;38 typedef array_t job_closure_t; 39 39 40 40 extern errno_t job_create_closure(job_t *, job_closure_t *, int); -
uspace/srv/sysman/job_queue.c
r9559cf8 r03daabd 110 110 assert(other->merged_into == NULL); 111 111 112 errno_t rc = dyn_array_concat(&trunk->blocked_jobs, &other->blocked_jobs);112 errno_t rc = array_concat(&trunk->blocked_jobs, &other->blocked_jobs); 113 113 if (rc != EOK) { 114 114 return rc; 115 115 } 116 dyn_array_clear(&other->blocked_jobs);116 array_clear(&other->blocked_jobs); 117 117 118 118 // TODO allocate observed object … … 145 145 { 146 146 assert(trunk->blocked_jobs.size >= trunk->blocked_jobs_count); 147 dyn_array_clear_range(&trunk->blocked_jobs,147 array_clear_range(&trunk->blocked_jobs, 148 148 trunk->blocked_jobs_count, trunk->blocked_jobs.size); 149 149 } … … 172 172 173 173 /* Check consistency with existing jobs. */ 174 dyn_array_foreach(*closure, job_t *, job_it) {174 array_foreach(*closure, job_t *, job_it) { 175 175 job_t *job = *job_it; 176 176 job_t *other_job = job->unit->job; … … 214 214 /* Aggregate merged jobs, or rollback any changes in existing jobs */ 215 215 bool finish_merge = (rc == EOK) && !has_error; 216 dyn_array_foreach(*closure, job_t *, job_it) {216 array_foreach(*closure, job_t *, job_it) { 217 217 if ((*job_it)->merged_into == NULL) { 218 218 continue; … … 236 236 * in their blocked_jobs array. 237 237 */ 238 dyn_array_foreach(*closure, job_t *, job_it) {238 array_foreach(*closure, job_t *, job_it) { 239 239 job_t *job = (*job_it); 240 240 if (job->merged_into != NULL) { … … 255 255 256 256 /* We've stolen references from the closure, so erase it */ 257 dyn_array_clear(closure);257 array_clear(closure); 258 258 259 259 return EOK; -
uspace/srv/sysman/sysman.c
r9559cf8 r03daabd 366 366 job_t *job = job_args->job; 367 367 int flags = job_args->flags; 368 dyn_array_t job_closure;369 dyn_array_initialize(&job_closure, job_t *);368 array_t job_closure; 369 array_initialize(&job_closure, job_t *); 370 370 371 371 if (job_args->callback != NULL) { … … 402 402 job_del_ref(&job); 403 403 404 dyn_array_foreach(job_closure, job_t *, closure_job) {404 array_foreach(job_closure, job_t *, closure_job) { 405 405 job_del_ref(&(*closure_job)); 406 406 } 407 dyn_array_destroy(&job_closure);407 array_destroy(&job_closure); 408 408 } 409 409 -
uspace/srv/sysman/test/job_closure.c
r9559cf8 r03daabd 40 40 PCUT_TEST_SUITE(job_closure); 41 41 42 static dyn_array_t exp_closure;43 static dyn_array_t act_closure;42 static array_t exp_closure; 43 static array_t act_closure; 44 44 45 45 static bool same_job(job_t *expected, job_t *actual) … … 49 49 } 50 50 51 static bool same_jobs( dyn_array_t *expected, dyn_array_t *actual)51 static bool same_jobs(array_t *expected, array_t *actual) 52 52 { 53 53 if (expected->size != actual->size) { … … 58 58 59 59 /* Verify expected \subseteq actual (we've compared sizes) */ 60 dyn_array_foreach(*expected, job_t *, it_exp) {60 array_foreach(*expected, job_t *, it_exp) { 61 61 bool found = false; 62 dyn_array_foreach(*actual, job_t *, it_act) {62 array_foreach(*actual, job_t *, it_act) { 63 63 if (same_job(*it_exp, *it_act)) { 64 64 found = true; … … 79 79 { 80 80 bool found = false; 81 dyn_array_foreach(blocking_job->blocked_jobs, job_t *, it) {81 array_foreach(blocking_job->blocked_jobs, job_t *, it) { 82 82 if (*it == blocked_job) { 83 83 found = true; … … 94 94 } 95 95 96 static void dummy_add_closure( dyn_array_t *closure)97 { 98 dyn_array_foreach(*closure, job_t *, it) {96 static void dummy_add_closure(array_t *closure) 97 { 98 array_foreach(*closure, job_t *, it) { 99 99 (*it)->unit->job = *it; 100 100 } 101 101 } 102 102 103 static void destroy_job_closure( dyn_array_t *closure)104 { 105 dyn_array_foreach(*closure, job_t *, it) {103 static void destroy_job_closure(array_t *closure) 104 { 105 array_foreach(*closure, job_t *, it) { 106 106 job_del_ref(&(*it)); 107 107 } … … 113 113 mock_set_units_state(STATE_STOPPED); 114 114 115 dyn_array_initialize(&exp_closure, job_t *);116 errno_t rc = dyn_array_reserve(&exp_closure, MAX_TYPES * MAX_UNITS);115 array_initialize(&exp_closure, job_t *); 116 errno_t rc = array_reserve(&exp_closure, MAX_TYPES * MAX_UNITS); 117 117 assert(rc == EOK); 118 118 119 dyn_array_initialize(&act_closure, job_t *);120 rc = dyn_array_reserve(&act_closure, MAX_TYPES * MAX_UNITS);119 array_initialize(&act_closure, job_t *); 120 rc = array_reserve(&act_closure, MAX_TYPES * MAX_UNITS); 121 121 assert(rc == EOK); 122 122 … … 127 127 { 128 128 destroy_job_closure(&act_closure); 129 dyn_array_destroy(&act_closure);129 array_destroy(&act_closure); 130 130 131 131 destroy_job_closure(&exp_closure); 132 dyn_array_destroy(&exp_closure);132 array_destroy(&exp_closure); 133 133 134 134 mock_destroy_units(); … … 156 156 PCUT_ASSERT_INT_EQUALS(EOK, rc); 157 157 158 dyn_array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED));159 dyn_array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED));160 dyn_array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STARTED));158 array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED)); 159 array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED)); 160 array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STARTED)); 161 161 162 162 dummy_add_closure(&act_closure); … … 188 188 PCUT_ASSERT_INT_EQUALS(EOK, rc); 189 189 190 dyn_array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED));191 dyn_array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED));192 dyn_array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STARTED));190 array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED)); 191 array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED)); 192 array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STARTED)); 193 193 194 194 dummy_add_closure(&act_closure); … … 222 222 PCUT_ASSERT_INT_EQUALS(EOK, rc); 223 223 224 dyn_array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED));225 dyn_array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED));226 dyn_array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STARTED));224 array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED)); 225 array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED)); 226 array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STARTED)); 227 227 228 228 dummy_add_closure(&act_closure); … … 269 269 PCUT_ASSERT_INT_EQUALS(EOK, rc); 270 270 271 dyn_array_append(&exp_closure, job_t *, dummy_job(u0, STATE_STOPPED));272 dyn_array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED));273 dyn_array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED));274 dyn_array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STOPPED));275 dyn_array_append(&exp_closure, job_t *, dummy_job(u4, STATE_STOPPED));276 dyn_array_append(&exp_closure, job_t *, dummy_job(u5, STATE_STOPPED));277 dyn_array_append(&exp_closure, job_t *, dummy_job(u6, STATE_STOPPED));271 array_append(&exp_closure, job_t *, dummy_job(u0, STATE_STOPPED)); 272 array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED)); 273 array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED)); 274 array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STOPPED)); 275 array_append(&exp_closure, job_t *, dummy_job(u4, STATE_STOPPED)); 276 array_append(&exp_closure, job_t *, dummy_job(u5, STATE_STOPPED)); 277 array_append(&exp_closure, job_t *, dummy_job(u6, STATE_STOPPED)); 278 278 279 279 dummy_add_closure(&act_closure);
Note:
See TracChangeset
for help on using the changeset viewer.
