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.
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...
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/10377 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB