diff options
author | Jeremy Allison <jra@samba.org> | 2009-10-09 12:50:26 -0700 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2009-10-20 15:00:28 +0200 |
commit | 2ce7736058b58e337d42fc5e134096cc05cba4ed (patch) | |
tree | 8615c9b3f9563140ff254b90c72bffe6f54c63d9 /lib/tevent | |
parent | 21d70b508b6e38a0659bc4ecfef7b360bce91b71 (diff) | |
download | samba-2ce7736058b58e337d42fc5e134096cc05cba4ed.tar.gz |
Fix bug 6796 - Deleting an event context on shutdown can cause smbd to crash.
Sync's tevent signal code with 3.5.x tree.
Protects against ev pointer being NULL.
Jeremy
(cherry picked from commit 56290654c0c2056c31e0b348ba0d01e5c28ba89b)
Diffstat (limited to 'lib/tevent')
-rw-r--r-- | lib/tevent/tevent_signal.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c index 0ca2a2760b0..ab170a66cf7 100644 --- a/lib/tevent/tevent_signal.c +++ b/lib/tevent/tevent_signal.c @@ -90,18 +90,12 @@ static void tevent_common_signal_handler(int signum) SIG_INCREMENT(sig_state->signal_count[signum]); SIG_INCREMENT(sig_state->got_signal); - if (sig_state->sig_handlers[signum] != NULL) { - ev = sig_state->sig_handlers[signum]->se->event_ctx; - /* doesn't matter if this pipe overflows */ - res = write(ev->pipe_fds[1], &c, 1); - } - /* Write to each unique event context. */ for (sl = sig_state->sig_handlers[signum]; sl; sl = sl->next) { - if (sl->se->event_ctx != ev) { + if (sl->se->event_ctx && sl->se->event_ctx != ev) { + ev = sl->se->event_ctx; /* doesn't matter if this pipe overflows */ res = write(ev->pipe_fds[1], &c, 1); - ev = sl->se->event_ctx; } } |