[Issue 20028] New: Stalled thread in concurrency.d unittest

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Jul 4 23:54:10 UTC 2019


https://issues.dlang.org/show_bug.cgi?id=20028

          Issue ID: 20028
           Summary: Stalled thread in concurrency.d unittest
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: minor
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: zorael at gmail.com

2.087.

In a unit test in concurrency.d, a thread is spawned to await the numbers 1 to
9 to be sent to it via concurrency messages. A Generator is set up to provide
the numbers, but it only yields 1, 2 and 3. The thread is left waiting for 4 to
9, which never arrive, and the thread stalls on receiveOnly!int().

https://github.com/dlang/phobos/blob/98c7f5aa/std/concurrency.d#L1771

> auto tid = spawn({
>     int i;
> 
>     try
>     {
>         for (i = 1; i < 10; i++)  // <--
>         {
>             assertNotThrown!AssertError(assert(receiveOnly!int() == i));
>         }
>     }
>     catch (OwnerTerminated e)
>     {
> 
>     }
> 
>     // i will advance 1 past the last value expected
>     assert(i == 4);
> });
> 
> auto r = new Generator!int({
>     assertThrown!Exception(yield(2.0));
>     yield(); // ensure this is a no-op
>     yield(1);
>     yield(); // also once something has been yielded
>     yield(2);
>     yield(3);
> });
> 
> foreach (e; r)
> {
>     tid.send(e);
> }

Changing it to (i = 1; i <= 3; i++) fixes it and lets the thread exit.

--


More information about the Digitalmars-d-bugs mailing list