Check for NULL id to job_get, so that in the next patch we can move job_get inside a single critical section of job_create.
Also add missing notifier_list_init for the on_idle NotifierList, which seems to have been forgot. Signed-off-by: Emanuele Giuseppe Esposito <eespo...@redhat.com> --- job.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/job.c b/job.c index 96fb8e9730..48b304c3ff 100644 --- a/job.c +++ b/job.c @@ -375,6 +375,10 @@ Job *job_get(const char *id) { Job *job; + if (!id) { + return NULL; + } + QLIST_FOREACH(job, &jobs, job_list) { if (job->id && !strcmp(id, job->id)) { return job; @@ -406,15 +410,18 @@ void *job_create(const char *job_id, const JobDriver *driver, JobTxn *txn, error_setg(errp, "Invalid job ID '%s'", job_id); return NULL; } - if (job_get(job_id)) { - error_setg(errp, "Job ID '%s' already in use", job_id); - return NULL; - } } else if (!(flags & JOB_INTERNAL)) { error_setg(errp, "An explicit job ID is required"); return NULL; } + job_lock(); + if (job_get(job_id)) { + error_setg(errp, "Job ID '%s' already in use", job_id); + job_unlock(); + return NULL; + } + job = g_malloc0(driver->instance_size); job->driver = driver; job->id = g_strdup(job_id); @@ -434,6 +441,7 @@ void *job_create(const char *job_id, const JobDriver *driver, JobTxn *txn, notifier_list_init(&job->on_finalize_completed); notifier_list_init(&job->on_pending); notifier_list_init(&job->on_ready); + notifier_list_init(&job->on_idle); job_state_transition(job, JOB_STATUS_CREATED); aio_timer_init(qemu_get_aio_context(), &job->sleep_timer, -- 2.31.1