You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
bugzilla (@WalterBright) commented on 2019-12-10T10:33:34Z
What exactly is the problem? This unittest has run thousends of times and always worked. IMHO the loop intentionally loops until 10. This is part of the test...
zorael reported this on 2019-07-04T23:54:10Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=20028
CC List
Description
The text was updated successfully, but these errors were encountered: