I believe it is impossible to throw out of a signal handler. Or out of any kind of callback (e.g., X11). Any exception that hits a C-barrier will terminate the application.
You'll have to figure out a different mechanism to detect the signal condition in your program. Perhaps by setting a volatile global variable within the signal handler, and checking that global at opportune times in your regular code.
HTH, --Eljay