In article <[email protected]>, Mouse <[email protected]> wrote: >At work, we have a program that (because of its DOS heritage) does a >lot of work in signal handlers. > >When I first ported it from DOS to NetBSD, I converted interrupt >handlers into signal handlers. Then it crashed occasionally. Digging >into the crashes, it turned out that it was an Xlib call getting >interrupted by a signal, with the handler making another Xlib call and >colliding over some Xlib-internal data structures. > >So I opened a second X connection and arranged for the main line to use >one of them and the "interrupt" (signal-handling) line to use the >other. That stabilized it. > >Now, for various reasons, they are trying to move it to Linux. They're >seeing crashes that look like > > main line -> > Xlib (main-line connection) -> > malloc-family call -> > signal handler -> > Xlib (signal-handler connection) -> > malloc-family call -> > boom > >The malloc family in use there is clearly not signal-safe. > >This then makes me wonder why we didn't see the same on NetBSD. >signal(7) says our malloc isn't signal-safe either, but I'm wondering >whether it actually is signal-safe in 9.1 and signal safety just isn't >promised, or perhaps it's not signal-safe but the window of risk is >much smaller, or...what?
I doubt that any implementation of malloc is signal-safe unless it is intentionally written to be signal safe. christos
