[
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: [email protected]
For additional commands, e-mail: [email protected]