diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2012-06-22 15:07:36 +0930 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2012-06-22 07:35:17 +0200 |
commit | fc9b2987611d7535b92288b26b09db19a0e2d78e (patch) | |
tree | 432223a076e40ca47465abfb665be5c01069601f /source3 | |
parent | 02bacf1f95046163dfb5afb40f33b37ccdf1f374 (diff) | |
download | samba-fc9b2987611d7535b92288b26b09db19a0e2d78e.tar.gz samba-fc9b2987611d7535b92288b26b09db19a0e2d78e.tar.bz2 samba-fc9b2987611d7535b92288b26b09db19a0e2d78e.zip |
util_tdb: move timeout chainlock variants from source3/lib/util/util_tdb.c
We're about to use them for dbwrap.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'source3')
-rw-r--r-- | source3/Makefile.in | 25 | ||||
-rw-r--r-- | source3/include/util_tdb.h | 7 | ||||
-rw-r--r-- | source3/lib/util_tdb.c | 81 |
3 files changed, 24 insertions, 89 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index f4b00a7ff0..d66f6bfd99 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -1567,7 +1567,30 @@ NTLM_AUTH_OBJ = ${NTLM_AUTH_OBJ1} \ VLP_OBJ = printing/tests/vlp.o \ - ../lib/util/util_tdb.o \ + ../lib/util/util_tdb.o \ + ../lib/util/signal.o \ + ../lib/util/debug.o \ + ../lib/util/util_strlist.o \ + ../lib/util/fault.o \ + ../lib/util/become_daemon.o \ + ../lib/util/substitute.o \ + lib/util_sec.o \ + ../lib/util/time.o \ + ../lib/util/charset/util_str.o \ + ../lib/util/charset/pull_push.o \ + ../lib/util/charset/util_unistr_w.o \ + ../lib/util/charset/codepoints.o \ + ../lib/util/charset/iconv.o \ + ../lib/util/charset/weird.o \ + ../lib/util/charset/convert_string.o \ + ../lib/util/talloc_stack.o \ + ../lib/util/smb_threads.o \ + ../lib/util/xfile.o \ + ../lib/util/util_file.o \ + ../lib/util/util.o \ + ../lib/util/util_str_common.o \ + ../lib/util/data_blob.o \ + ../dynconfig/dynconfig.o \ $(LIBSAMBAUTIL_OBJ) \ param/util.o diff --git a/source3/include/util_tdb.h b/source3/include/util_tdb.h index f127cea1ea..e350413cf9 100644 --- a/source3/include/util_tdb.h +++ b/source3/include/util_tdb.h @@ -26,13 +26,6 @@ #include "../libcli/util/ntstatus.h" /* for map_nt_error_from_tdb() */ #include "../../lib/util/util_tdb.h" -int tdb_chainlock_with_timeout( struct tdb_context *tdb, TDB_DATA key, - unsigned int timeout); -int tdb_lock_bystring_with_timeout(struct tdb_context *tdb, const char *keyval, - int timeout); -int tdb_read_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval, - unsigned int timeout); - int tdb_trans_store_bystring(TDB_CONTEXT *tdb, const char *keystr, TDB_DATA data, int flags); int tdb_trans_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, diff --git a/source3/lib/util_tdb.c b/source3/lib/util_tdb.c index 552a914eb4..c6c6d26277 100644 --- a/source3/lib/util_tdb.c +++ b/source3/lib/util_tdb.c @@ -31,87 +31,6 @@ /* these are little tdb utility functions that are meant to make dealing with a tdb database a little less cumbersome in Samba */ -static SIG_ATOMIC_T gotalarm; - -/*************************************************************** - Signal function to tell us we timed out. -****************************************************************/ - -static void gotalarm_sig(int signum) -{ - gotalarm = 1; -} - -/**************************************************************************** - Lock a chain with timeout (in seconds). -****************************************************************************/ - -static int tdb_chainlock_with_timeout_internal( TDB_CONTEXT *tdb, TDB_DATA key, unsigned int timeout, int rw_type) -{ - /* Allow tdb_chainlock to be interrupted by an alarm. */ - int ret; - gotalarm = 0; - - if (timeout) { - CatchSignal(SIGALRM, gotalarm_sig); - tdb_setalarm_sigptr(tdb, &gotalarm); - alarm(timeout); - } - - if (rw_type == F_RDLCK) - ret = tdb_chainlock_read(tdb, key); - else - ret = tdb_chainlock(tdb, key); - - if (timeout) { - alarm(0); - tdb_setalarm_sigptr(tdb, NULL); - CatchSignal(SIGALRM, SIG_IGN); - if (gotalarm && (ret != 0)) { - DEBUG(0,("tdb_chainlock_with_timeout_internal: alarm (%u) timed out for key %s in tdb %s\n", - timeout, key.dptr, tdb_name(tdb))); - /* TODO: If we time out waiting for a lock, it might - * be nice to use F_GETLK to get the pid of the - * process currently holding the lock and print that - * as part of the debugging message. -- mbp */ - return -1; - } - } - - return ret == 0 ? 0 : -1; -} - -/**************************************************************************** - Write lock a chain. Return non-zero if timeout or lock failed. -****************************************************************************/ - -int tdb_chainlock_with_timeout( TDB_CONTEXT *tdb, TDB_DATA key, unsigned int timeout) -{ - return tdb_chainlock_with_timeout_internal(tdb, key, timeout, F_WRLCK); -} - -int tdb_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval, - int timeout) -{ - TDB_DATA key = string_term_tdb_data(keyval); - - return tdb_chainlock_with_timeout(tdb, key, timeout); -} - -/**************************************************************************** - Read lock a chain by string. Return non-zero if timeout or lock failed. -****************************************************************************/ - -int tdb_read_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval, unsigned int timeout) -{ - TDB_DATA key = string_term_tdb_data(keyval); - - return tdb_chainlock_with_timeout_internal(tdb, key, timeout, F_RDLCK); -} - - - - int tdb_trans_store_bystring(TDB_CONTEXT *tdb, const char *keystr, TDB_DATA data, int flags) { |