about summary refs log tree commit homepage
path: root/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'process.c')
-rw-r--r--process.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/process.c b/process.c
index 3122e08..8dfa10a 100644
--- a/process.c
+++ b/process.c
@@ -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);
 }
 
 /*