X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fclone.h;h=c3605080e8eac4ad38ec96557bbae96b77da4277;hp=6685c6f6e9ed084ac5817beb5abe4c4f635a0e9f;hb=45aad3a7fb17edf1aa382bc0a7f561758089d121;hpb=3aace903dce99468d6a9b7dcb17507a9e1148e82 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