Author: markj
Date: Fri Dec  8 18:04:43 2017
New Revision: 326701
URL: https://svnweb.freebsd.org/changeset/base/326701

Log:
  MFC r326134:
  Duplicate helpers after disabling inherited tracepoints during a fork.

Modified:
  stable/11/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
==============================================================================
--- stable/11/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c Fri Dec 
 8 17:52:53 2017        (r326700)
+++ stable/11/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c Fri Dec 
 8 18:04:43 2017        (r326701)
@@ -600,8 +600,8 @@ fasttrap_fork(proc_t *p, proc_t *cp)
        pid_t ppid = p->p_pid;
        int i;
 
-#ifdef illumos
        ASSERT(curproc == p);
+#ifdef illumos
        ASSERT(p->p_proc_flag & P_PR_LOCK);
 #else
        PROC_LOCK_ASSERT(p, MA_OWNED);
@@ -609,26 +609,15 @@ fasttrap_fork(proc_t *p, proc_t *cp)
 #ifdef illumos
        ASSERT(p->p_dtrace_count > 0);
 #else
-       if (p->p_dtrace_helpers) {
-               /*
-                * dtrace_helpers_duplicate() allocates memory.
-                */
-               _PHOLD(cp);
-               PROC_UNLOCK(p);
-               PROC_UNLOCK(cp);
-               dtrace_helpers_duplicate(p, cp);
-               PROC_LOCK(cp);
-               PROC_LOCK(p);
-               _PRELE(cp);
-       }
        /*
         * This check is purposely here instead of in kern_fork.c because,
         * for legal resons, we cannot include the dtrace_cddl.h header
         * inside kern_fork.c and insert if-clause there.
         */
-       if (p->p_dtrace_count == 0)
+       if (p->p_dtrace_count == 0 && p->p_dtrace_helpers == NULL)
                return;
 #endif
+
        ASSERT(cp->p_dtrace_count == 0);
 
        /*
@@ -657,6 +646,8 @@ fasttrap_fork(proc_t *p, proc_t *cp)
        _PHOLD(cp);
        PROC_UNLOCK(cp);
        PROC_UNLOCK(p);
+       if (p->p_dtrace_count == 0)
+               goto dup_helpers;
 #endif
 
        /*
@@ -710,6 +701,9 @@ fasttrap_fork(proc_t *p, proc_t *cp)
        mutex_enter(&cp->p_lock);
        sprunlock(cp);
 #else
+dup_helpers:
+       if (p->p_dtrace_helpers != NULL)
+               dtrace_helpers_duplicate(p, cp);
        PROC_LOCK(p);
        PROC_LOCK(cp);
        _PRELE(cp);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to