Program crash: GC destroys an object unexpectedly
eugene
dee0xeed at gmail.com
Mon Sep 13 18:03:47 UTC 2021
On Monday, 13 September 2021 at 17:18:30 UTC, eugene wrote:
> And the most strange thing is this
It is echo-server/echo-client pair.
And it is echo-client that crashes upon SIGINT.
echo-server contains very similar code
class Listener : StageMachine {
enum ulong M0_WORK = 0;
enum ulong M1_WORK = 1;
enum ulong M0_GONE = 0;
RestRoom workerPool;
ushort port;
TCPListener reception;
Signal sg0, sg1;
this(RestRoom wPool, ushort port = 1111) {
super("LISTENER");
workerPool = wPool;
this.port = port;
Stage init, work;
init = addStage("INIT", &listenerInitEnter);
work = addStage("WORK", &listenerWorkEnter);
init.addReflex("M0", work);
work.addReflex("L0", &listenerWorkL0);
work.addReflex("M0", &listenerWorkM0);
work.addReflex("S0", &listenerWorkS0);
work.addReflex("S1", &listenerWorkS1);
}
void listenerInitEnter() {
reception = newTCPListener(port);
sg0 = newSignal(Signal.sigInt);
sg1 = newSignal(Signal.sigTerm);
msgTo(this, M0_WORK);
}
but it does not crashes (destruc).
The only significant difference - it has TCPListener instance,
besides absolutely the same sg0 and sg1 'channels'.
More information about the Digitalmars-d-learn
mailing list