Changeset 81c4e6ec in mainline for uspace/srv/sysman/job_closure.c


Ignore:
Timestamp:
2020-07-05T20:46:27Z (4 years ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Parents:
a73aaec1
git-author:
Matthieu Riolo <matthieu.riolo@…> (2020-07-05 20:37:10)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2020-07-05 20:46:27)
Message:

removing adt/array and replace it with adt/list in sysman

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/sysman/job_closure.c

    ra73aaec1 r81c4e6ec  
    6363static errno_t job_add_blocked_job(job_t *blocking_job, job_t *blocked_job)
    6464{
    65         assert(blocking_job->blocked_jobs.size ==
     65        assert(list_count(&blocking_job->blocked_jobs) ==
    6666            blocking_job->blocked_jobs_count);
    6767
    68         errno_t rc = array_append(&blocking_job->blocked_jobs, job_t *,
    69             blocked_job);
    70         if (rc != EOK) {
     68        job_link_t *job_link = calloc(1, sizeof(job_link_t));
     69        if (job_link == NULL) {
    7170                return ENOMEM;
    7271        }
     72
     73        job_link->job = blocked_job;
     74
     75        list_append(&job_link->link, &blocking_job->blocked_jobs);
     76
    7377        job_add_ref(blocked_job);
    7478
     
    97101                        goto finish;
    98102                }
    99                 job_t *first_job = array_last(closure, job_t *);
     103
     104                link_t *last_link = list_last(closure);
     105                job_link_t *job_link = list_get_instance(last_link, job_link_t, link);
     106                job_t *first_job = job_link->job;
    100107
    101108                job_add_ref(first_job);
     
    118125                }
    119126
     127                job_link_t *job_link = calloc(1, sizeof(job_link_t));
     128                if (job_link == NULL) {
     129                        goto finish;
     130                }
     131
     132                job_link->job = created_job;
     133
    120134                /* Pass job reference to closure and add one for unit */
    121                 rc = array_append(closure, job_t *, created_job);
    122                 if (rc != EOK) {
    123                         goto finish;
    124                 }
     135                list_append(&job_link->link, closure);
    125136
    126137                job_add_ref(created_job);
     
    164175                }
    165176
     177                job_link_t *job_link = calloc(1, sizeof(job_link_t));
     178                if (job_link == NULL) {
     179                        goto finish;
     180                }
     181
     182                job_link->job = created_job;
     183
    166184                /* Pass job reference to closure and add one for unit */
    167                 rc = array_append(closure, job_t *, created_job);
    168                 if (rc != EOK) {
    169                         goto finish;
    170                 }
     185                list_append(&job_link->link, closure);
    171186        }
    172187        rc = visit_propagate_job(u, e, ops, closure);
     
    308323        }
    309324
    310         errno_t rc = array_append(job_closure, job_t *, main_job);
    311         if (rc != EOK) {
    312                 return rc;
    313         }
     325        job_link_t *job_link = calloc(1, sizeof(job_link_t));
     326        if (job_link == NULL) {
     327                return ENOMEM;
     328        }
     329
     330        job_link->job = main_job;
     331
     332        list_append(&job_link->link, job_closure);
     333
    314334        job_add_ref(main_job); /* Add one for the closure */
    315335
     
    330350        }
    331351
    332         rc = bfs_traverse_component(main_job->unit, &propagate_ops, job_closure);
     352        errno_t rc = bfs_traverse_component(main_job->unit, &propagate_ops, job_closure);
    333353
    334354        sysman_log(LVL_DEBUG2, "%s: %i&%i", __func__, flags, CLOSURE_ISOLATE);
     
    343363
    344364        if (rc == EOK) {
    345                 array_foreach(*job_closure, job_t *, job_it) {
     365                list_foreach(*job_closure, link, job_link_t, job_it) {
     366                        job_t *job = job_it->job;
    346367                        sysman_log(LVL_DEBUG2, "%s\t%s, refs: %u", __func__,
    347                             unit_name((*job_it)->unit), atomic_load(&(*job_it)->refcnt));
     368                            unit_name(job->unit), atomic_load(&job->refcnt));
    348369                }
    349370        }
    350371
    351372        /* Clean after ourselves (BFS tag jobs) */
    352         array_foreach(*job_closure, job_t *, job_it) {
    353                 job_t *j = (*job_it)->unit->bfs_data;
    354                 assert(*job_it == j);
     373        list_foreach(*job_closure, link, job_link_t, job_it) {
     374                job_t *j = job_it->job->unit->bfs_data;
     375                assert(job_it->job == j);
    355376                job_del_ref(&j);
    356                 (*job_it)->unit->bfs_data = NULL;
    357         }
    358 
    359         return rc;
    360 }
     377                job_it->job->unit->bfs_data = NULL;
     378        }
     379
     380        return rc;
     381}
Note: See TracChangeset for help on using the changeset viewer.