Author: kib
Date: Wed Feb 25 16:17:16 2015
New Revision: 279283
URL: https://svnweb.freebsd.org/changeset/base/279283

Log:
  When failing to claim ownership of a umtx_pi, restore the umutex owner
  to its previous, unowned state.  This avoids compounding an existing
  problem of inconsistent ownership.
  
  Submitted by: Eric van Gyzen <eric_van_gy...@dell.com>
  Obtained from:        Dell Inc.
  PR:   198914
  MFC after:    1 week

Modified:
  head/sys/kern/kern_umtx.c

Modified: head/sys/kern/kern_umtx.c
==============================================================================
--- head/sys/kern/kern_umtx.c   Wed Feb 25 16:12:56 2015        (r279282)
+++ head/sys/kern/kern_umtx.c   Wed Feb 25 16:17:16 2015        (r279283)
@@ -1741,6 +1741,17 @@ do_lock_pi(struct thread *td, struct umu
                                error = umtx_pi_claim(pi, td);
                                umtxq_unbusy(&uq->uq_key);
                                umtxq_unlock(&uq->uq_key);
+                               if (error != 0) {
+                                       /*
+                                        * Since we're going to return an
+                                        * error, restore the m_owner to its
+                                        * previous, unowned state to avoid
+                                        * compounding the problem.
+                                        */
+                                       (void)casuword32(&m->m_owner,
+                                           id | UMUTEX_CONTESTED,
+                                           UMUTEX_CONTESTED);
+                               }
                                break;
                        }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to