From: Mathieu Desnoyers Date: Thu, 23 Feb 2012 00:26:47 +0000 (-0500) Subject: Implement CLONE_FILES compat layer with rfork X-Git-Tag: v2.0.0-rc3~44 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=89831a7431103178268b5f1dccbf094e7c4f4095;p=lttng-tools.git Implement CLONE_FILES compat layer with rfork Signed-off-by: Mathieu Desnoyers --- diff --git a/src/common/compat/clone.h b/src/common/compat/clone.h index 45eb37982..08aa10dcd 100644 --- a/src/common/compat/clone.h +++ b/src/common/compat/clone.h @@ -22,19 +22,20 @@ #include +static inline +int lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg) +{ + return clone(fn, child_stack, CLONE_FILES | SIGCHLD, arg); +} + #elif __FreeBSD__ #include -#define CLONE_FILES 0 - -#define clone(fct_ptr, child_stack, flags, arg, args...) \ - compat_clone(fct_ptr, child_stack, flags, arg) - -int compat_clone(int (*fn)(void *), void *child_stack, int flags, - void *arg) +static inline +int lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg) { - return -ENOSYS; + return rfork(RFPROC | RFTHREAD); } #else diff --git a/src/common/runas.c b/src/common/runas.c index bee107951..86db9b868 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -237,9 +237,8 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) * Pointing to the middle of the stack to support architectures * where the stack grows up (HPPA). */ - pid = clone(child_run_as, child_stack + (RUNAS_CHILD_STACK_SIZE / 2), - CLONE_FILES | SIGCHLD, - &run_as_data, NULL); + pid = lttng_clone_files(child_run_as, child_stack + (RUNAS_CHILD_STACK_SIZE / 2), + &run_as_data); if (pid < 0) { perror("clone"); ret = pid;