Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 1 | From 37725f3e22edb50e0ca2d1fff971321a5a4d5112 Mon Sep 17 00:00:00 2001 |
| 2 | From: Hongxu Jia <hongxu.jia@windriver.com> |
| 3 | Date: Wed, 12 Jul 2017 03:05:13 -0400 |
| 4 | Subject: [PATCH 11/11] Moved the call to isc_app_ctxstart() to not get signal |
| 5 | block by all threads |
| 6 | |
| 7 | Signed-off-by: Francis Dupont <fdupont@isc.org> |
| 8 | |
| 9 | In https://source.isc.org/git/bind9.git, since the following |
| 10 | commit applied: |
| 11 | ... |
| 12 | commit b99bfa184bc9375421b5df915eea7dfac6a68a99 |
| 13 | Author: Evan Hunt <each@isc.org> |
| 14 | Date: Wed Apr 10 13:49:57 2013 -0700 |
| 15 | |
| 16 | [master] unify internal and export libraries |
| 17 | |
| 18 | 3550. [func] Unified the internal and export versions of the |
| 19 | BIND libraries, allowing external clients to use |
| 20 | the same libraries as BIND. [RT #33131] |
| 21 | ... |
| 22 | (git show b99bfa184bc9375421b5df915eea7dfac6a68a99 -- ./lib/isc/unix/app.c) |
| 23 | |
| 24 | In this commit, if bind9 enable threads(ISC_PLATFORM_USETHREADS), |
| 25 | it blocks signal SIGHUP, SIGINT and SIGTERM in isc__app_ctxstart. |
| 26 | Which caused dhclient/dhcpd could not be stopped by SIGTERM. |
| 27 | |
| 28 | It caused systemd's reboot hung which send SIGTERM by default. |
| 29 | |
| 30 | Upstream-Status: Backport [https://source.isc.org/git/dhcp.git] |
| 31 | Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> |
| 32 | --- |
| 33 | omapip/isclib.c | 25 +++++++++++++++---------- |
| 34 | 1 file changed, 15 insertions(+), 10 deletions(-) |
| 35 | |
| 36 | diff --git a/omapip/isclib.c b/omapip/isclib.c |
| 37 | index ce86490..6a04345 100644 |
| 38 | --- a/omapip/isclib.c |
| 39 | +++ b/omapip/isclib.c |
| 40 | @@ -185,16 +185,6 @@ dhcp_context_create(int flags, |
| 41 | if (result != ISC_R_SUCCESS) |
| 42 | goto cleanup; |
| 43 | |
| 44 | - result = isc_app_ctxstart(dhcp_gbl_ctx.actx); |
| 45 | - if (result != ISC_R_SUCCESS) |
| 46 | - return (result); |
| 47 | - dhcp_gbl_ctx.actx_started = ISC_TRUE; |
| 48 | - |
| 49 | - /* Not all OSs support suppressing SIGPIPE through socket |
| 50 | - * options, so set the sigal action to be ignore. This allows |
| 51 | - * broken connections to fail gracefully with EPIPE on writes */ |
| 52 | - handle_signal(SIGPIPE, SIG_IGN); |
| 53 | - |
| 54 | result = isc_taskmgr_createinctx(dhcp_gbl_ctx.mctx, |
| 55 | dhcp_gbl_ctx.actx, |
| 56 | 1, 0, |
| 57 | @@ -217,6 +207,21 @@ dhcp_context_create(int flags, |
| 58 | result = isc_task_create(dhcp_gbl_ctx.taskmgr, 0, &dhcp_gbl_ctx.task); |
| 59 | if (result != ISC_R_SUCCESS) |
| 60 | goto cleanup; |
| 61 | + |
| 62 | + result = isc_app_ctxstart(dhcp_gbl_ctx.actx); |
| 63 | + if (result != ISC_R_SUCCESS) |
| 64 | + return (result); |
| 65 | + dhcp_gbl_ctx.actx_started = ISC_TRUE; |
| 66 | + |
| 67 | + /* Not all OSs support suppressing SIGPIPE through socket |
| 68 | + * options, so set the sigal action to be ignore. This allows |
| 69 | + * broken connections to fail gracefully with EPIPE on writes */ |
| 70 | + handle_signal(SIGPIPE, SIG_IGN); |
| 71 | + |
| 72 | + /* Reset handlers installed by isc_app_ctxstart() |
| 73 | + * to default for control-c and kill */ |
| 74 | + handle_signal(SIGINT, SIG_DFL); |
| 75 | + handle_signal(SIGTERM, SIG_DFL); |
| 76 | } |
| 77 | |
| 78 | #if defined (NSUPDATE) |
| 79 | -- |
| 80 | 1.8.3.1 |
| 81 | |