diff options
author | Volker Lendecke <vl@samba.org> | 2010-02-16 15:21:25 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2010-02-16 15:28:42 +0100 |
commit | f8b246e44c819b909b23b4b98ef0999c84d2f4ff (patch) | |
tree | c60a838518ee8b90eb7f90236e093ce205ba4481 /source3 | |
parent | 83542d973ca771353109c7da4b0391d6ba910f53 (diff) | |
download | samba-f8b246e44c819b909b23b4b98ef0999c84d2f4ff.tar.gz samba-f8b246e44c819b909b23b4b98ef0999c84d2f4ff.tar.bz2 samba-f8b246e44c819b909b23b4b98ef0999c84d2f4ff.zip |
s3: Fix timeout calculation if g_lock_lock is given a timeout < 60s
Detected while showing this code to obnox :-)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/g_lock.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/source3/lib/g_lock.c b/source3/lib/g_lock.c index add670c154..e4c6d7c660 100644 --- a/source3/lib/g_lock.c +++ b/source3/lib/g_lock.c @@ -338,7 +338,7 @@ NTSTATUS g_lock_lock(struct g_lock_ctx *ctx, const char *name, fd_set *r_fds = NULL; int max_fd = 0; int ret; - struct timeval select_timeout; + struct timeval timeout_remaining, select_timeout; status = g_lock_trylock(ctx, name, lock_type); if (NT_STATUS_IS_OK(status)) { @@ -395,8 +395,13 @@ NTSTATUS g_lock_lock(struct g_lock_ctx *ctx, const char *name, } #endif + time_now = timeval_current(); + timeout_remaining = timeval_until(&time_now, &timeout_end); select_timeout = timeval_set(60, 0); + select_timeout = timeval_min(&select_timeout, + &timeout_remaining); + ret = sys_select(max_fd + 1, r_fds, NULL, NULL, &select_timeout); if (ret == -1) { |