summaryrefslogtreecommitdiff
path: root/source3/lib
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2010-02-16 15:21:25 +0100
committerKarolin Seeger <kseeger@samba.org>2010-04-01 09:39:18 +0200
commite7aee6f328f07da3129b56f6491a8a6ab63fa6cf (patch)
tree64b3236db4b95d43916ffbe29437c8db635d52d2 /source3/lib
parente46c217efea9ed0a67fbb0aa75303be12b5e19fa (diff)
downloadsamba-e7aee6f328f07da3129b56f6491a8a6ab63fa6cf.tar.gz
s3: Fix timeout calculation if g_lock_lock is given a timeout < 60s
Detected while showing this code to obnox :-) (cherry picked from commit f8b246e44c819b909b23b4b98ef0999c84d2f4ff) (cherry picked from commit f73b306797f354d0a24ff8af40b05d6151e52a06)
Diffstat (limited to 'source3/lib')
-rw-r--r--source3/lib/g_lock.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/source3/lib/g_lock.c b/source3/lib/g_lock.c
index add670c154d..e4c6d7c660e 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) {