Looking at the last fix for catching signals on X server startup I noticed that the signal handling is still flawed:
Only shared objects of type volatile sig_atomic_t can be safely accessed and modified from within the signal handler, lxcom_last_sig must be declared accordingly (also note that the size of sig_atomic_t is implementation dependent). I also think this can be completely avoided if failing to start X quits lxdm rather than continuously restarting it. The current signal handler also still invokes several non-async-safe functions, i.e. lxcom_raise_signal uses sprintf and strlen, lxcom_write uses memset. log_sigsegv is also problematic in this regard, I think backtrace_symbols() is not async-safe (somebody correct me if I'm wrong), lxdm_quit_self surely isn't, call _Exit or abort instead. Apparently (from what i gather from the GDM source), the X server needs SIGTTIN, SIGTTOU, and SIGUSR1 to be ignored. Any file operations after set_signal need to be protected against non-fatal signal handling, i.e. errno needs to be checked for EINTR and the operation if necessary repeated. You don't check any return values when setting up signal handlers. I'm not sure if you are aware that when you don't explicitly mask other signals your signal handler might be interrupted by a different signal. Trying to setup a signal handler for SIGKILL is a nop, it cannot be caught. -- Guido Berhoerster ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ Lxde-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/lxde-list
