On Monday, 30 September 2013 at 02:13:47 UTC, H. S. Teoh wrote:
On Mon, Sep 30, 2013 at 03:48:07AM +0200, Adam D. Ruppe wrote:
Is there anything we can do to automatically clean up if the
user
hits ctrl+c on Linux?
I just had my system get messed up because I was allocating
shared
memory with the X server, which was released in the
destructor...
but that never got called because I killed the program with
ctrl+c.
Then the system ran out of shm handles and I had to clean that
up
before i could start a bunch of programs again.
Of course, a possible solution is to set up a signal handler
in my
own program, but even with that, tracking all the dtors that
need to
actually be called sounds difficult, especially as the program
gets
more involved.
[...]
Well, ctrl-C can be handled, so the way I'd do it is to set up
a signal
handler for SIGINT and have it write something to a self-pipe
read by
the event handler, then the event handler can throw an
Exception (which
should cause dtors to run as the stack unwinds).
I've no idea how signals work in Windows so I don't know if
it's even
possible to have a consistent D implementation of
signal-handling.
T
Windows uses kernel level exceptions for some signals, known as
Structured Exception Handling. For others, callback handlers are
used instead, similar to signal handlers.
http://msdn.microsoft.com/library/windows/desktop/ms680657.aspx
signal() is available,
http://msdn.microsoft.com/en-us/library/xdkz3x12%28v=vs.110%29.aspx
However, since I never used signal on Windows, here is the
specific Windows API for the same purpose,
http://msdn.microsoft.com/en-us/library/ms686016%28VS.85%29.aspx
--
Paulo