summaryrefslogtreecommitdiff
path: root/source3/lib/util_tdb.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-11-06 21:47:57 -0800
committerJeremy Allison <jra@samba.org>2007-11-06 21:47:57 -0800
commitd8f3c9d0786ff637241d2a9409e1c7c253715ba5 (patch)
tree7fe843ce0e72d348e6114af9626d41c29419c1c0 /source3/lib/util_tdb.c
parent7498e1b8c09abef2db0658c6bfd6d42891c9690d (diff)
downloadsamba-d8f3c9d0786ff637241d2a9409e1c7c253715ba5.tar.gz
samba-d8f3c9d0786ff637241d2a9409e1c7c253715ba5.tar.bz2
samba-d8f3c9d0786ff637241d2a9409e1c7c253715ba5.zip
Fix bug where tdb lock call interrupted with
an alarm sig would not terminate and could lead to runaway smbd processes. Thanks to Dave Daugherty @ Centrify for pointing this out to us. Jeremy. (This used to be commit ef8da1698371c95495add53df81a978df709c88d)
Diffstat (limited to 'source3/lib/util_tdb.c')
-rw-r--r--source3/lib/util_tdb.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/source3/lib/util_tdb.c b/source3/lib/util_tdb.c
index 6aa7a5348f..35c1a92ad5 100644
--- a/source3/lib/util_tdb.c
+++ b/source3/lib/util_tdb.c
@@ -72,6 +72,7 @@ static int tdb_chainlock_with_timeout_internal( TDB_CONTEXT *tdb, TDB_DATA key,
if (timeout) {
CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig);
+ tdb_setalarm_sigptr(tdb, &gotalarm);
alarm(timeout);
}
@@ -82,6 +83,7 @@ static int tdb_chainlock_with_timeout_internal( TDB_CONTEXT *tdb, TDB_DATA key,
if (timeout) {
alarm(0);
+ tdb_setalarm_sigptr(tdb, NULL);
CatchSignal(SIGALRM, SIGNAL_CAST SIG_IGN);
if (gotalarm) {
DEBUG(0,("tdb_chainlock_with_timeout_internal: alarm (%u) timed out for key %s in tdb %s\n",