[ https://issues.apache.org/jira/browse/DISPATCH-478?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ulf Lilleengen resolved DISPATCH-478. ------------------------------------- Resolution: Fixed Assignee: Ulf Lilleengen Fix Version/s: 0.7.0 > Dispatch hung in shutdown due to multiple concurrent signal handlers > -------------------------------------------------------------------- > > Key: DISPATCH-478 > URL: https://issues.apache.org/jira/browse/DISPATCH-478 > Project: Qpid Dispatch > Issue Type: Bug > Reporter: Ulf Lilleengen > Assignee: Ulf Lilleengen > Priority: Minor > Fix For: 0.7.0 > > > When I ran qdrouterd with perf and pressed Ctrl+C, perf would send SIGTERM as > well as SIGINT right after each other to the router. > Scenario: > The first thread would pick up and handle the first signal in > handle_signals_LH(). However, within the function, it unlocks the > qd_server->lock before calling the registered handler. > When it unlocks this lock, some other thread will pick up the second signal > and jump into the qd_server_pause() code, where it will wait indefinitely for > threads to pause (I saw this in GDB, where 1 thread was 'missing', and all > others marked as canceled). The original handler will have canceled the > thread trying to pause all others, but it is not able to jump out. > Patch: https://github.com/apache/qpid-dispatch/pull/95 > This patch ensures that only 1 signal handler can run at a time, which fixes > the issue for me. Note that it will still potentially mask signals while > handling a signal, but the current set of signals (SIGHUP, SIGQUIT, SIGINT, > SIGTERM) either shutdown the router or do nothing. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org