X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fclone.h;h=c3605080e8eac4ad38ec96557bbae96b77da4277;hb=52b07d8a5f38946bea3176d486c1934ca7639415;hp=6685c6f6e9ed084ac5817beb5abe4c4f635a0e9f;hpb=7657ae75b85d728d84c2f540df6a3739a167090c;p=lttng-tools.git diff --git a/src/common/compat/clone.h b/src/common/compat/clone.h index 6685c6f6e..c3605080e 100644 --- a/src/common/compat/clone.h +++ b/src/common/compat/clone.h @@ -23,7 +23,7 @@ #include static inline -int lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg) +pid_t lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg) { return clone(fn, child_stack, CLONE_FILES | SIGCHLD, arg); } @@ -33,9 +33,27 @@ int lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg) #include static inline -int lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg) +pid_t lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg) { - return rfork(RFPROC | RFTHREAD); + pid_t pid; + + pid = rfork(RFPROC | RFTHREAD); + if (pid == 0) { + /* child */ + int ret; + + ret = fn(arg); + exit(ret); + } else if (pid > 0) { + /* parent */ + /* + * Just return, the caller will wait for the child. + */ + return pid; + } else { + /* Error */ + return pid; + } } #else