Fix race condition in ConditionVariablePrepareToSleep.

Thomas Munro
pull/17/merge
Robert Haas 9 years ago
parent fc8219dc54
commit 3f3d60d3bb
  1. 9
      src/backend/storage/lmgr/condition_variable.c

@ -71,14 +71,17 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv)
&MyProc->procLatch, NULL);
}
/*
* Reset my latch before adding myself to the queue and before entering
* the caller's predicate loop.
*/
ResetLatch(&MyProc->procLatch);
/* Add myself to the wait queue. */
SpinLockAcquire(&cv->mutex);
if (!proclist_contains(&cv->wakeup, pgprocno, cvWaitLink))
proclist_push_tail(&cv->wakeup, pgprocno, cvWaitLink);
SpinLockRelease(&cv->mutex);
/* Reset my latch before entering the caller's predicate loop. */
ResetLatch(&MyProc->procLatch);
}
/*--------------------------------------------------------------------------

Loading…
Cancel
Save