The Samba-Bugzilla – Attachment 5453 Details for
Bug 7206
duplicate signal handler, signals are processed twice in child process
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
v3-5-test
dup-signal-handle-v3-5-test.mbox (text/plain), 3.40 KB, created by
Bo Yang
on 2010-03-03 23:11:43 UTC
(
hide
)
Description:
v3-5-test
Filename:
MIME Type:
Creator:
Bo Yang
Created:
2010-03-03 23:11:43 UTC
Size:
3.40 KB
patch
obsolete
>From d00c0484c3466eb368375c9c0aeae8e0c66b79f7 Mon Sep 17 00:00:00 2001 >From: Bo Yang <boyang@samba.org> >Date: Tue, 9 Feb 2010 17:02:20 +0800 >Subject: [PATCH] s3: signals are processed twice in child. > >Signed-off-by: Bo Yang <boyang@samba.org> >(cherry picked from commit 8c8bb51de1ac2baa46ac0736fae12c034288e5d4) >--- > lib/tevent/tevent.c | 7 +++++++ > lib/tevent/tevent_internal.h | 1 + > lib/tevent/tevent_signal.c | 33 ++++++++++++++++++++++++++++----- > 3 files changed, 36 insertions(+), 5 deletions(-) > >diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c >index 56d0da3..a0ee208 100644 >--- a/lib/tevent/tevent.c >+++ b/lib/tevent/tevent.c >@@ -176,6 +176,13 @@ int tevent_common_context_destructor(struct tevent_context *ev) > sn = se->next; > se->event_ctx = NULL; > DLIST_REMOVE(ev->signal_events, se); >+ /* >+ * This is important, Otherwise signals >+ * are handled twice in child. eg, SIGHUP. >+ * one added in parent, and another one in >+ * the child. -- BoYang >+ */ >+ tevent_cleanup_pending_signal_handlers(se); > } > > return 0; >diff --git a/lib/tevent/tevent_internal.h b/lib/tevent/tevent_internal.h >index e10f52e..7f5fd64 100644 >--- a/lib/tevent/tevent_internal.h >+++ b/lib/tevent/tevent_internal.h >@@ -299,6 +299,7 @@ struct tevent_signal *tevent_common_add_signal(struct tevent_context *ev, > const char *handler_name, > const char *location); > int tevent_common_check_signal(struct tevent_context *ev); >+void tevent_cleanup_pending_signal_handlers(struct tevent_signal *se); > > bool tevent_standard_init(void); > bool tevent_select_init(void); >diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c >index 0f3d83e..45f65cf 100644 >--- a/lib/tevent/tevent_signal.c >+++ b/lib/tevent/tevent_signal.c >@@ -133,7 +133,9 @@ static void tevent_common_signal_handler_info(int signum, siginfo_t *info, > > static int tevent_common_signal_list_destructor(struct tevent_common_signal_list *sl) > { >- DLIST_REMOVE(sig_state->sig_handlers[sl->se->signum], sl); >+ if (sig_state->sig_handlers[sl->se->signum]) { >+ DLIST_REMOVE(sig_state->sig_handlers[sl->se->signum], sl); >+ } > return 0; > } > >@@ -154,12 +156,16 @@ static int tevent_signal_destructor(struct tevent_signal *se) > > if (sig_state->sig_handlers[se->signum] == NULL) { > /* restore old handler, if any */ >- sigaction(se->signum, sig_state->oldact[se->signum], NULL); >- sig_state->oldact[se->signum] = NULL; >+ if (sig_state->oldact[se->signum]) { >+ sigaction(se->signum, sig_state->oldact[se->signum], NULL); >+ sig_state->oldact[se->signum] = NULL; >+ } > #ifdef SA_SIGINFO > if (se->sa_flags & SA_SIGINFO) { >- talloc_free(sig_state->sig_info[se->signum]); >- sig_state->sig_info[se->signum] = NULL; >+ if (sig_state->sig_info[se->signum]) { >+ talloc_free(sig_state->sig_info[se->signum]); >+ sig_state->sig_info[se->signum] = NULL; >+ } > } > #endif > } >@@ -398,3 +404,20 @@ int tevent_common_check_signal(struct tevent_context *ev) > > return 1; > } >+ >+void tevent_cleanup_pending_signal_handlers(struct tevent_signal *se) >+{ >+ struct tevent_common_signal_list *sl; >+ sl = talloc_get_type(se->additional_data, >+ struct tevent_common_signal_list); >+ >+ tevent_common_signal_list_destructor(sl); >+ >+ if (sig_state->sig_handlers[se->signum] == NULL) { >+ if (sig_state->oldact[se->signum]) { >+ sigaction(se->signum, sig_state->oldact[se->signum], NULL); >+ sig_state->oldact[se->signum] = NULL; >+ } >+ } >+ return; >+} >-- >1.6.0.2 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
jmcd
:
review+
Actions:
View
Attachments on
bug 7206
:
5452
| 5453