diff options
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 26 |
1 files changed, 18 insertions, 8 deletions
@@ -49,16 +49,17 @@ void mog_process_reset(void) char *mog_process_name(unsigned id) { + char *s; if (mog_process_is_worker(id)) - return xasprintf("worker[%u]", id); + return asprintf(&s, "worker[%u]", id) >= 0 ? s : 0; switch (id) { - case MOG_PROC_UNKNOWN: return xstrdup("unknown"); - case MOG_PROC_IOSTAT: return xstrdup("iostat"); - case MOG_PROC_UPGRADE: return xstrdup("upgrade"); + case MOG_PROC_UNKNOWN: return 0; + case MOG_PROC_IOSTAT: return strdup("iostat"); + case MOG_PROC_UPGRADE: return strdup("upgrade"); } - assert(0 && "Unknown ID"); - return xasprintf("BUG[%u]", id); + + return asprintf(&s, "BUG[%u]", id) >= 0 ? s : 0; } bool mog_process_is_worker(unsigned id) @@ -114,15 +115,24 @@ size_t mog_kill_each_worker(int signo) /* Registers a process with a given id */ void mog_process_register(pid_t pid, unsigned id) { - struct mog_process *p = xmalloc(sizeof(struct mog_process)); + struct mog_process *p = malloc(sizeof(struct mog_process)); assert(id != MOG_PROC_UNKNOWN && "MOG_PROC_UNKNOWN may not be registered"); + if (!p) + goto err; + p->pid = pid; p->id = id; - mog_oom_if_null(hash_insert(processes, p)); + if (hash_insert(processes, p)) + return; /* success */ + + PRESERVE_ERRNO(free(p)); +err: + syslog(LOG_ERR, "unable to register PID:%d with id=%u: %m", + (int)pid, id); } /* |