Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(2884)

Issue 85580043: code review 85580043: sync: fix spurious wakeup from WaitGroup.Wait (Closed)

Can't Edit
Can't Publish+Mail
Start Review
Created:
10 years ago by ruiu
Modified:
10 years ago
Reviewers:
gobot, brainman, rsc, dvyukov, ioe
CC:
dvyukov, 0xjnml, rsc, golang-codereviews
Visibility:
Public.

Description

sync: fix spurious wakeup from WaitGroup.Wait There is a race condition that causes spurious wakeup from Wait in the following case: G1: decrement wg.counter, observe the counter is now 0 (should unblock goroutines queued *at this moment*) G2: increment wg.counter G2: call Wait() to add itself to the wait queue G1: acquire wg.m, unblock all waiting goroutines In the last step G2 is spuriously woken up by G1. Fixes issue 7734.

Patch Set 1 #

Patch Set 2 : diff -r 519230b4d06a https://code.google.com/p/go #

Patch Set 3 : diff -r 519230b4d06a https://code.google.com/p/go #

Patch Set 4 : diff -r 519230b4d06a https://code.google.com/p/go #

Patch Set 5 : diff -r 519230b4d06a https://code.google.com/p/go #

Unified diffs Side-by-side diffs Delta from patch set Stats (+32 lines, -4 lines) Patch
M src/pkg/sync/waitgroup.go View 1 1 chunk +6 lines, -4 lines 0 comments Download
M src/pkg/sync/waitgroup_test.go View 1 2 3 2 chunks +26 lines, -0 lines 0 comments Download

Messages

Total messages: 30
ruiu
Hello golang-codereviews@googlegroups.com, I'd like you to review this change to https://code.google.com/p/go
10 years ago (2014-04-08 19:47:54 UTC) #1
rsc
R=dvyukov It seems to me that this code replaces a spurious wakeup with a missed ...
10 years ago (2014-04-08 20:32:21 UTC) #2
ruiu
I don't think that should be considered as a missed wakeup, because the order of ...
10 years ago (2014-04-08 20:47:13 UTC) #3
dvyukov
ouch! great job! how have you found this? preliminary the fix looks correct
10 years ago (2014-04-09 07:34:47 UTC) #4
dvyukov
On 2014/04/08 20:47:13, ruiu wrote: > I don't think that should be considered as a ...
10 years ago (2014-04-09 07:36:19 UTC) #5
dvyukov
please add the test to waitgroup_test.go use the program that you provided in the issue ...
10 years ago (2014-04-09 07:37:58 UTC) #6
ruiu
I found it by reading the code of WaitGroup. I have also read all the ...
10 years ago (2014-04-09 08:03:25 UTC) #7
dvyukov
On Wed, Apr 9, 2014 at 12:03 PM, <ruiu@google.com> wrote: > I found it by ...
10 years ago (2014-04-09 08:09:28 UTC) #8
rsc
On Wed, Apr 9, 2014 at 3:36 AM, <dvyukov@google.com> wrote: > On 2014/04/08 20:47:13, ruiu ...
10 years ago (2014-04-09 13:41:26 UTC) #9
0xjnml
On Wed, Apr 9, 2014 at 3:41 PM, Russ Cox <rsc@golang.org> wrote: > Are you ...
10 years ago (2014-04-09 13:50:40 UTC) #10
rsc
On Wed, Apr 9, 2014 at 9:50 AM, Jan Mercl <0xjnml@gmail.com> wrote: > On Wed, ...
10 years ago (2014-04-09 14:00:52 UTC) #11
dvyukov
On Wed, Apr 9, 2014 at 6:41 AM, Russ Cox <rsc@golang.org> wrote: > On Wed, ...
10 years ago (2014-04-09 14:03:35 UTC) #12
rsc
On Wed, Apr 9, 2014 at 10:03 AM, Dmitry Vyukov <dvyukov@google.com> wrote: > Add of ...
10 years ago (2014-04-09 14:08:19 UTC) #13
dvyukov
On Wed, Apr 9, 2014 at 7:08 AM, Russ Cox <rsc@golang.org> wrote: > On Wed, ...
10 years ago (2014-04-09 14:16:22 UTC) #14
rsc
On Wed, Apr 9, 2014 at 10:16 AM, Dmitry Vyukov <dvyukov@google.com> wrote: > On Wed, ...
10 years ago (2014-04-09 14:33:29 UTC) #15
dvyukov
On Wed, Apr 9, 2014 at 7:33 AM, Russ Cox <rsc@golang.org> wrote: > On Wed, ...
10 years ago (2014-04-09 14:44:50 UTC) #16
rsc
On Wed, Apr 9, 2014 at 10:44 AM, Dmitry Vyukov <dvyukov@google.com> wrote: > >> Do ...
10 years ago (2014-04-09 16:31:41 UTC) #17
ruiu
On Wed, Apr 9, 2014 at 9:31 AM, Russ Cox <rsc@golang.org> wrote: > On Wed, ...
10 years ago (2014-04-09 18:02:10 UTC) #18
rsc
ruiu, please add the test so we can submit this CL. thanks.
10 years ago (2014-04-09 19:17:25 UTC) #19
ruiu
Hello dvyukov@google.com, 0xjnml@gmail.com (cc: golang-codereviews@googlegroups.com, rsc@golang.org), Please take another look.
10 years ago (2014-04-09 19:44:21 UTC) #20
rsc
LGTM leaving for dvyukov
10 years ago (2014-04-09 19:54:52 UTC) #21
ruiu
Dmitry, I don't have commit access, so please submit if it's LGTM. Thanks. On Wed, ...
10 years ago (2014-04-09 19:57:31 UTC) #22
dvyukov
LGTM
10 years ago (2014-04-10 14:44:35 UTC) #23
dvyukov
*** Submitted as https://code.google.com/p/go/source/detail?r=e95997ba7135 *** sync: fix spurious wakeup from WaitGroup.Wait There is a race ...
10 years ago (2014-04-10 14:44:50 UTC) #24
gobot
This CL appears to have broken the windows-amd64-race builder. See http://build.golang.org/log/2739e5425f33ec233427501024b763e7309ee182
10 years ago (2014-04-10 14:49:13 UTC) #25
dvyukov
Looks unrelated: --- FAIL: TestCtrlBreak (0.55 seconds) signal_windows_test.go:73: Failed to compile: exit status 2 # ...
10 years ago (2014-04-10 14:51:28 UTC) #26
brainman
On 2014/04/10 14:51:28, dvyukov wrote: > Looks unrelated: > > --- FAIL: TestCtrlBreak (0.55 seconds) ...
10 years ago (2014-04-11 06:42:12 UTC) #27
dvyukov
On Fri, Apr 11, 2014 at 10:42 AM, <alex.brainman@gmail.com> wrote: > On 2014/04/10 14:51:28, dvyukov ...
10 years ago (2014-04-11 07:34:59 UTC) #28
brainman
On 2014/04/11 07:34:59, dvyukov wrote: > > I've connected to the builder and it has ...
10 years ago (2014-04-11 07:46:21 UTC) #29
ioe
10 years ago (2014-04-12 21:59:46 UTC) #30
On Wednesday, April 9, 2014 6:31:40 PM UTC+2, russ cox wrote:
> I think it is important that Wait and Add behave as if some ordering happened:
either Wait before Add, or Wait after Add, and either way Wait does not block
forever. I don't think that should be controversial, and I don't think it needs
to be called out in any documentation either. 

Thanks for clearing this up! 

I always considered the sequence Wait();Add() as invalid and considered the
sync.WaitGroup as consumable resource, which is consumed after the call to Wait.
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b