Okay, I think I got it. HashMap missed to call GC.addRange() for its table. Since the table contains a bool[Task] map, this could cause access violations, as the map would be collected immediately by the first GC run.

https://github.com/rejectedsoftware/vibe.d/commit/97d87ccdf3c7fdd9aef29032e02c2e26fa60e1ef

Ah, sweet, I will definitely check that out. That sounds consistent with what I was seeing (i.e. dies immediately even without any events being killed). Sorry for the lack of repro in the mean time, the issue was mostly that I didn't have a good way to emulate the client side (i.e. the game) of it in a test case, not so much that it was hard to pare down the server part.