Program crash: GC destroys an object unexpectedly

eugene dee0xeed at gmail.com
Thu Sep 23 17:44:17 UTC 2021


On Thursday, 23 September 2021 at 17:20:18 UTC, Steven 
Schveighoffer wrote:
> So imagine the sequence:

With ease!

> 1. ctrl-c, signal handler triggers, shutting down the loop

Just a note: there is no 'signal handler' in the program.
SIGINT/SIGTERM are **blocked**, notifications (POLLIN) are 
received via epoll_wait().

> 2. main exits
> 3. GC finalizes all objects, including the Stopper and it's 
> members

Probably, a destructor for Signal class should be added, in which

- close fd, obtained from signalfd()
- unblock the signal (thus default signal handler is back again)

> 4. ctrl-c happens again, but you didn't unregister the signal 
> handler, so it's run again, referencing the now-deleted object.

At this point we have default signal handler

> 5. segfault
> It's theoretically a very very small window.

But even without destructor, no segfault will happen,
because **there is no signal handler**





More information about the Digitalmars-d-learn mailing list