Fix: liblttng-ust-fork deadlock
[lttng-ust.git] / liblttng-ust-fork / ustfork.c
index 8fade56e84c5413bd30c679d7f3fd5c30b4e3c70..9ed087c2eff59bc1b6dd53f37e9d6f5ce9b7e555 100644 (file)
@@ -28,6 +28,8 @@
 
 #include <lttng/ust.h>
 
+struct user_desc;
+
 pid_t fork(void)
 {
        static pid_t (*plibc_func)(void) = NULL;
@@ -54,10 +56,6 @@ pid_t fork(void)
        return retval;
 }
 
-#ifdef __linux__
-
-struct user_desc;
-
 struct ustfork_clone_info {
        int (*fn)(void *);
        void *arg;
@@ -109,7 +107,7 @@ int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...)
                                tls, ctid);
        } else {
                /* Creating a real process, we need to intervene. */
-               struct ustfork_clone_info info = { fn: fn, arg: arg };
+               struct ustfork_clone_info info = { fn = fn, arg = arg };
 
                ust_before_fork(&info.sigset);
                retval = plibc_func(clone_fn, child_stack, flags, &info,
@@ -119,41 +117,3 @@ int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...)
        }
        return retval;
 }
-
-#elif defined (__FreeBSD__)
-
-pid_t rfork(int flags)
-{
-       static pid_t (*plibc_func)(void) = NULL;
-       sigset_t sigset;
-       pid_t retval;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "rfork");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"rfork\" symbol\n");
-                       return -1;
-               }
-       }
-
-       ust_before_fork(&sigset);
-       /* Do the real rfork */
-       retval = plibc_func();
-       if (retval == 0) {
-               /* child */
-               ust_after_fork_child(&sigset);
-       } else {
-               ust_after_fork_parent(&sigset);
-       }
-       return retval;
-}
-
-/*
- * On BSD, no need to override vfork, because it runs in the context of
- * the parent, with parent waiting until execve or exit is executed in
- * the child.
- */
-
-#else
-#warning "Unknown OS. You might want to ensure that fork/clone/vfork/fork handling is complete."
-#endif
This page took 0.023265 seconds and 4 git commands to generate.