Bug 20028 – Stalled thread in concurrency.d unittest

Status
NEW
Severity
minor
Priority
P3
Component
phobos
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2019-07-04T23:54:10Z
Last change time
2024-12-01T16:35:10Z
Assigned to
No Owner
Creator
JR
Moved to GitHub: phobos#10377 →

Comments

Comment #0 by zorael — 2019-07-04T23:54:10Z
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.
Comment #1 by bugzilla — 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...
Comment #2 by robert.schadek — 2024-12-01T16:35:10Z
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