Commit 6a29b4a
authored
BlockingFlush: Deregister parties upon message completion (#471)
As alluded to in #261, parties registered when messages are enqueued must be deregistered when those messages complete, otherwise the Phaser's number of parties increases without end.
As such there are certain cases where `BlockingFlush#block` will hang indefinitely, even once all messages have completed.
Example:
```
00: Phaser initialized; phase=0, parties=1, arrived=0
01: Enqueue Message 1; phase=0, parties=2, arrived=0
02: Enqueue Message 2; phase=0, parties=3, arrived=0
03: arriveAndAwaitAdvance; phase=0, parties=3, arrived=1
04: Complete Message 1; phase=0, parties=3, arrived=2
05: Complete Message 2; phase=0, parties=3, arrived=3 (advance)
06: Enqueue Message 4; phase=1, parties=4, arrived=0
07: Enqueue Message 5; phase=1, parties=5, arrived=0
08: arriveAndAwaitAdvance; phase=1, parties=5, arrived=1
09: Complete Message 4; phase=1, parties=5, arrived=2
10: Complete Message 5; phase=1, parties=5, arrived=3 (no advance)
```
if no more messages are enqueued, `08` will block forever
Deregistering parties when messages complete solves this problem
```
00: Phaser initialized; phase=0, parties=1, arrived=0
01: Enqueue Message 1; phase=0, parties=2, arrived=0
02: Enqueue Message 2; phase=0, parties=3, arrived=0
03: arriveAndAwaitAdvance; phase=0, parties=3, arrived=1
04: Complete Message 1; phase=0, parties=2, arrived=1
05: Complete Message 2; phase=0, parties=1, arrived=1 (advance)
06: Enqueue Message 4; phase=1, parties=2, arrived=0
07: Enqueue Message 5; phase=1, parties=3, arrived=0
08: arriveAndAwaitAdvance; phase=1, parties=3, arrived=1
09: Complete Message 4; phase=1, parties=2, arrived=1
10: Complete Message 5; phase=1, parties=1, arrived=1 (advance)
```1 parent c58231a commit 6a29b4a
1 file changed
+2
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
| 63 | + | |
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| |||
0 commit comments