Author: kib
Date: Mon May 17 08:35:14 2010
New Revision: 208187
URL: http://svn.freebsd.org/changeset/base/208187

Log:
  MFC r207848:
  The thread_unsuspend() requires both process mutex and process spinlock
  locked. Postpone the process unlock till the thread_unsuspend() is called.

Modified:
  stable/7/sys/fs/procfs/procfs_ctl.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/fs/procfs/procfs_ctl.c
==============================================================================
--- stable/7/sys/fs/procfs/procfs_ctl.c Mon May 17 08:15:04 2010        
(r208186)
+++ stable/7/sys/fs/procfs/procfs_ctl.c Mon May 17 08:35:14 2010        
(r208187)
@@ -233,7 +233,6 @@ out:
                        PROC_LOCK(p);
                p->p_oppid = 0;
                p->p_flag &= ~P_WAITED; /* XXX ? */
-               PROC_UNLOCK(p);
                sx_xunlock(&proctree_lock);
 
                wakeup(td->td_proc);    /* XXX for CTL_WAIT below ? */
@@ -246,9 +245,10 @@ out:
         */
        case PROCFS_CTL_STEP:
                error = proc_sstep(FIRST_THREAD_IN_PROC(p)); /* XXXKSE */
-               PROC_UNLOCK(p);
-               if (error)
+               if (error) {
+                       PROC_UNLOCK(p);
                        return (error);
+               }
                break;
 
        /*
@@ -257,7 +257,6 @@ out:
         */
        case PROCFS_CTL_RUN:
                p->p_flag &= ~P_STOPPED_SIG;    /* this uses SIGSTOP */
-               PROC_UNLOCK(p);
                break;
 
        /*
@@ -289,6 +288,7 @@ out:
        PROC_SLOCK(p);
        thread_unsuspend(p); /* If it can run, let it do so. */
        PROC_SUNLOCK(p);
+       PROC_UNLOCK(p);
        return (0);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to