Bug 34027 - [TPL DataFlow] BufferBlock dies due to race condition between SendAsync() and ReceiveAsync()
Summary: [TPL DataFlow] BufferBlock dies due to race condition between SendAsync() and...
Status: NEW
Alias: None
Product: Class Libraries
Classification: Mono
Component: General (show other bugs)
Version: unspecified
Hardware: PC All
: --- normal
Target Milestone: Untriaged
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2015-09-17 01:32 UTC by Atsushi Eno
Modified: 2015-09-17 07:52 UTC (History)
2 users (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments

Description Atsushi Eno 2015-09-17 01:32:26 UTC
This guy (@melponn at twitter) reported that BufferBlock is suffered from race condition.

Repro code (partial) is shown at:
http://www.slideshare.net/melpon/mono-is-dead/80

static async Task SendTask(BufferBlock<string> bb) 
{
  for (int i = 0; i < 10000; i++) { 
    await bb.SendAsync(i.ToString()).ConfigureAwait(false);
    await Task.Delay(1).ConfigureAwait(false);
  }
}
static async Task ReceiveTask(BufferBlock<string> bb) {
  for (int i = 0; i < 10000; i++) {
    try {
      await bb.ReceiveAsync(TimeSpan.FromMilliseconds(1)) .ConfigureAwait(false); 
    } catch (Exception) { }
  } 
}

He asked me to report to bugzilla (because he feels lazy to do so), so I'm creating this one instead.
Comment 1 INOMATA Kentaro 2015-09-17 07:52:46 UTC
the whole repro code and the managed stack trace are provided at:
http://melpon.org/wandbox/permlink/WOjTnFmP9fqUZhgl

Note You need to log in before you can comment on or make changes to this bug.