s3:blocking: do the timeout calculation before calling dbwrap_watched_watch_send()
authorStefan Metzmacher <metze@samba.org>
Mon, 19 Aug 2019 13:21:50 +0000 (15:21 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 9 Sep 2019 14:23:41 +0000 (14:23 +0000)
This makes the next commits easier to understand.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14113

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/smbd/blocking.c

index 98074c0c09ab53cc0fae8ac86a50df865b17d8ce..ac90f8c3ef16d61a53b3217945fd9baa001366ec 100644 (file)
@@ -308,14 +308,6 @@ struct tevent_req *smbd_smb1_do_locks_send(
        }
        state->deny_status = NT_STATUS_FILE_LOCK_CONFLICT;
 
-       subreq = dbwrap_watched_watch_send(
-               state, state->ev, lck->data->record, blocking_pid);
-       if (tevent_req_nomem(subreq, req)) {
-               goto done;
-       }
-       TALLOC_FREE(lck);
-       tevent_req_set_callback(subreq, smbd_smb1_do_locks_retry, req);
-
        endtime = state->endtime;
 
        if (blocking_smblctx == UINT64_MAX) {
@@ -330,6 +322,14 @@ struct tevent_req *smbd_smb1_do_locks_send(
                endtime = timeval_min(&endtime, &tmp);
        }
 
+       subreq = dbwrap_watched_watch_send(
+               state, state->ev, lck->data->record, blocking_pid);
+       if (tevent_req_nomem(subreq, req)) {
+               goto done;
+       }
+       TALLOC_FREE(lck);
+       tevent_req_set_callback(subreq, smbd_smb1_do_locks_retry, req);
+
        ok = tevent_req_set_endtime(subreq, state->ev, endtime);
        if (!ok) {
                tevent_req_oom(req);
@@ -450,14 +450,6 @@ static void smbd_smb1_do_locks_try(struct tevent_req *req)
        }
        state->deny_status = NT_STATUS_FILE_LOCK_CONFLICT;
 
-       subreq = dbwrap_watched_watch_send(
-               state, state->ev, lck->data->record, blocking_pid);
-       if (tevent_req_nomem(subreq, req)) {
-               goto done;
-       }
-       TALLOC_FREE(lck);
-       tevent_req_set_callback(subreq, smbd_smb1_do_locks_retry, req);
-
        endtime = state->endtime;
 
        if (blocking_smblctx == UINT64_MAX) {
@@ -472,6 +464,14 @@ static void smbd_smb1_do_locks_try(struct tevent_req *req)
                endtime = timeval_min(&endtime, &tmp);
        }
 
+       subreq = dbwrap_watched_watch_send(
+               state, state->ev, lck->data->record, blocking_pid);
+       if (tevent_req_nomem(subreq, req)) {
+               goto done;
+       }
+       TALLOC_FREE(lck);
+       tevent_req_set_callback(subreq, smbd_smb1_do_locks_retry, req);
+
        ok = tevent_req_set_endtime(subreq, state->ev, endtime);
        if (!ok) {
                status = NT_STATUS_NO_MEMORY;