Mercurial > projects > doodle
view doodle/core/backtrace.d @ 103:345fb56d89fc
Blind checkpoint
author | David Bryant <bagnose@gmail.com> |
---|---|
date | Thu, 18 Nov 2010 12:00:02 +1030 |
parents | 100dd23c7bdf |
children | 7abaf5c3959f |
line wrap: on
line source
module doodle.core.backtrace; // // Register signal handlers and throw Error. // Technically we shouldn't be throwing an exception from // a signal handler, but it happens to work. // private { import core.stdc.signal; import std.string; // signal handler for otherwise-fatal thread-specific signals extern (C) void signalHandler(int sig) { string name() { switch (sig) { case SIGSEGV: return "SIGSEGV"; case SIGFPE: return "SIGFPE"; case SIGILL: return "SIGILL"; case SIGABRT: return "SIGABRT"; case SIGINT: return "SIGINT"; default: return ""; } } throw new Error(format("Got signal %s %s", sig, name)); } shared static this() { // set up shared signal handlers for fatal thread-specific signals signal(SIGABRT, &signalHandler); signal(SIGFPE, &signalHandler); signal(SIGILL, &signalHandler); signal(SIGSEGV, &signalHandler); signal(SIGINT, &signalHandler); } }