Fix: Remove dependency on glibc 2.12 caused by pthread_setname_np
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 30 Sep 2015 20:48:12 +0000 (16:48 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 30 Sep 2015 21:06:22 +0000 (17:06 -0400)
prctl() can be used to set the same attribute set by
pthread_setname_np, but doesn't introduce a dependency on a newer
glibc. Using prctl(PR_SET_NAME) introduces a soft dependency on
Linux 2.6.9. However, the worker won't fail to launch if the call
fails as it is set out of convenience (debugger output).

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/runas.c

index fc30a5567774da58b0eb9f96bfda1d38338db9b5..57f7382bd2b6b6f8dd5f07adf4a7dfe90584f58a 100644 (file)
@@ -31,6 +31,7 @@
 #include <sched.h>
 #include <sys/signal.h>
 #include <assert.h>
+#include <sys/prctl.h>
 
 #include <common/common.h>
 #include <common/utils.h>
@@ -322,12 +323,11 @@ int run_as_worker(struct run_as_worker *worker)
        memset(worker->procname, 0, proc_orig_len);
        strncpy(worker->procname, DEFAULT_RUN_AS_WORKER_NAME, proc_orig_len);
 
-       ret = pthread_setname_np(pthread_self(), DEFAULT_RUN_AS_WORKER_NAME);
+       ret = prctl(PR_SET_NAME, DEFAULT_RUN_AS_WORKER_NAME, 0, 0, 0);
        if (ret) {
-               errno = ret;
-               ret = -1;
-               PERROR("pthread_setname_np");
-               return EXIT_FAILURE;
+               /* Don't fail as this is not essential. */
+               PERROR("prctl PR_SET_NAME");
+               ret = 0;
        }
 
        sendret.ret = 0;
This page took 0.025782 seconds and 4 git commands to generate.