during/spawn used not to add linkage assertions to its
initial-assertion set. In addition, if a spawned actor died in its
initial boot procedure, its initial assertions would never be visible.
These two problems interlocked to cause a space leak in during/spawn,
where monitoring facets would never be cleaned up.
This change does two things:
- adds linkage assertions to the initial-assertion set in during/spawn
- properly briefly signals initial-assertions even when a new actor
immediately crashes.
Together, these repair the space leak in during/spawn with a crashy
child startup procedure.
If:
- a field is used in an assertion of interest in facet A
- and that field changes
- to a value that causes the assertion of interest to overlap
with some facet B's assertion of interest
- and an assertion matching that interest was already known to the actor,
Then:
- previously, facet A would not be informed of the matching assertion
- but now, it is informed of the matching assertion.
This more or less only affects "on asserted" endpoints.
The change here should be written up as an erratum to chapter 5 in my
dissertation. Also, syndicate/js needs to be checked for the bug and
probably fixed in an analogous way.
Switch from synchronous to asynchronous UDP transmission, in case DNS
resolution takes a long time or fails. Specifically, in case of failure,
previously the UDP actor would crash, whereas now the packet is just
"dropped".
- New timestate `on-timeout` complementing `stop-when-timeout`
- IP layer avoids spurious reordering
- Demo HTTP server sends 4kB responses, for testing
- TCP now has something closer to proper sliding-window behavior
- TCP RTT estimator
- TCP now uses timestate driver rather than raw timer driver
- Many small TCP bugs found and fixed