svn commit: r350005 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Mon Jul 15 19:18:26 UTC 2019


Author: kib
Date: Mon Jul 15 19:18:25 2019
New Revision: 350005
URL: https://svnweb.freebsd.org/changeset/base/350005

Log:
  In do_sem2_wait(), balance umtx_key_get() with umtx_key_release() on retry.
  
  Reported by:	ler
  Bisected and reviewed by:	markj
  Sponsored by:	The FreeBSD Foundation
  MFC after:	12 days

Modified:
  head/sys/kern/kern_umtx.c

Modified: head/sys/kern/kern_umtx.c
==============================================================================
--- head/sys/kern/kern_umtx.c	Mon Jul 15 17:13:32 2019	(r350004)
+++ head/sys/kern/kern_umtx.c	Mon Jul 15 19:18:25 2019	(r350005)
@@ -3316,14 +3316,13 @@ do_sem2_wait(struct thread *td, struct _usem2 *sem, st
 
 	uq = td->td_umtxq;
 	flags = fuword32(&sem->_flags);
-	error = umtx_key_get(sem, TYPE_SEM, GET_SHARE(flags), &uq->uq_key);
-	if (error != 0)
-		return (error);
-
 	if (timeout != NULL)
 		abs_timeout_init2(&timo, timeout);
 
 again:
+	error = umtx_key_get(sem, TYPE_SEM, GET_SHARE(flags), &uq->uq_key);
+	if (error != 0)
+		return (error);
 	umtxq_lock(&uq->uq_key);
 	umtxq_busy(&uq->uq_key);
 	umtxq_insert(uq);


More information about the svn-src-head mailing list