Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Dec 2016 05:02:17 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r310454 - head/sys/kern
Message-ID:  <201612230502.uBN52Hmq041969@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Fri Dec 23 05:02:17 2016
New Revision: 310454
URL: https://svnweb.freebsd.org/changeset/base/310454

Log:
  Add a comment explaining the race fixed by r310423.
  
  Suggested and reviewed by: jhb
  X-MFC With:	r310423

Modified:
  head/sys/kern/subr_sleepqueue.c

Modified: head/sys/kern/subr_sleepqueue.c
==============================================================================
--- head/sys/kern/subr_sleepqueue.c	Fri Dec 23 04:59:22 2016	(r310453)
+++ head/sys/kern/subr_sleepqueue.c	Fri Dec 23 05:02:17 2016	(r310454)
@@ -892,7 +892,12 @@ sleepq_broadcast(void *wchan, int flags,
 	KASSERT(sq->sq_type == (flags & SLEEPQ_TYPE),
 	    ("%s: mismatch between sleep/wakeup and cv_*", __func__));
 
-	/* Resume all blocked threads on the sleep queue. */
+	/*
+	 * Resume all blocked threads on the sleep queue.  The last thread will
+	 * be given ownership of sq and may re-enqueue itself before
+	 * sleepq_resume_thread() returns, so we must cache the "next" queue
+	 * item at the beginning of the final iteration.
+	 */
 	wakeup_swapper = 0;
 	TAILQ_FOREACH_SAFE(td, &sq->sq_blocked[queue], td_slpq, tdn) {
 		thread_lock(td);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612230502.uBN52Hmq041969>