]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/job: use new job ID when we failed to deserialize job ID 27413/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 26 Apr 2023 05:39:56 +0000 (14:39 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 26 Apr 2023 15:36:41 +0000 (00:36 +0900)
This is for the case when we fail to deserialize job ID.
In job_install_deserialized(), we also check the job type, and that is
for the case when we failed to deserialize the job.
Let's gracefully handle the failure in deserializing the job ID.
This is paranoia, and just for safety. Should not change any behavior.

src/core/job.c

index 43a06a365e3ae4c2b8fdc03c4bd323710823dba3..24f407ad83a191cbf909e5d1e63e1249a048d3d7 100644 (file)
@@ -292,6 +292,10 @@ int job_install_deserialized(Job *j) {
                 return log_unit_debug_errno(j->unit, SYNTHETIC_ERRNO(EEXIST),
                                             "Unit already has a job installed. Not installing deserialized job.");
 
+        /* When the job does not have ID, or we failed to deserialize the job ID, then use a new ID. */
+        if (j->id <= 0)
+                j->id = manager_get_new_job_id(j->manager);
+
         r = hashmap_ensure_put(&j->manager->jobs, NULL, UINT32_TO_PTR(j->id), j);
         if (r == -EEXIST)
                 return log_unit_debug_errno(j->unit, r, "Job ID %" PRIu32 " already used, cannot deserialize job.", j->id);