Change crediting so that the credits are returned on the interim async response.
[metze/samba/wip.git] / source3 / smbd / smb2_server.c
index 91e00dc050037f917b63af43daf31bf266c54339..8dbf3276c09e5acb82944308ae0c9a27ffdd7099 100644 (file)
@@ -902,9 +902,11 @@ NTSTATUS smbd_smb2_request_pending_queue(struct smbd_smb2_request *req,
        /* Match W2K8R2... */
        SCVAL(body, 0x08, 0x21);
 
-       /* Ensure we correctly go through crediting. */
+       /* Ensure we correctly go through crediting. Grant
+          the credits now, and zero credits on the final
+          response. */
        smb2_set_operation_credit(req->sconn,
-                       NULL,
+                       &req->in.vector[i],
                        &state->vector[1]);
 
        if (req->do_signing) {
@@ -1443,9 +1445,10 @@ static NTSTATUS smbd_smb2_request_reply(struct smbd_smb2_request *req)
 
        smb2_setup_nbt_length(req->out.vector, req->out.vector_count);
 
-       /* Set credit for this operation. */
+       /* Set credit for this operation (zero credits if this
+          is a final reply for an async operation). */
        smb2_set_operation_credit(req->sconn,
-                       &req->in.vector[i],
+                       req->async ? NULL : &req->in.vector[i],
                        &req->out.vector[i]);
 
        if (req->do_signing) {