]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:smb2cli: only use tevent_req_defer_callback() if we have more than one smb2 response
authorStefan Metzmacher <metze@samba.org>
Wed, 7 Sep 2011 16:55:02 +0000 (18:55 +0200)
committerStefan Metzmacher <metze@samba.org>
Sun, 18 Sep 2011 03:33:10 +0000 (05:33 +0200)
metze

source3/libsmb/smb2cli_base.c

index 869c223b825dc592ae82cbe36e4d8efdb6f10226..d26e1b4a2588583bede6e4b4394422ac77c9555f 100644 (file)
@@ -515,6 +515,7 @@ static void smb2cli_inbuf_received(struct tevent_req *subreq)
        ssize_t received;
        int err;
        size_t num_pending;
+       bool defer = true;
 
        received = read_smb_recv(subreq, frame, &inbuf, &err);
        TALLOC_FREE(subreq);
@@ -602,7 +603,13 @@ static void smb2cli_inbuf_received(struct tevent_req *subreq)
                 * There might be more than one response
                 * we need to defer the notifications
                 */
-               tevent_req_defer_callback(req, state->ev);
+               if ((num_iov == 4) && (talloc_array_length(cli->conn.pending) == 0)) {
+                       defer = false;
+               }
+
+               if (defer) {
+                       tevent_req_defer_callback(req, state->ev);
+               }
 
                /*
                 * Note: here we use talloc_reference() in a way
@@ -623,6 +630,10 @@ static void smb2cli_inbuf_received(struct tevent_req *subreq)
 
        TALLOC_FREE(frame);
 
+       if (!defer) {
+               return;
+       }
+
        num_pending = talloc_array_length(cli->conn.pending);
        if (num_pending == 0) {
                if (state->cli->smb2.mid < UINT64_MAX) {