sq smbd_smb2_advance_send_queue *_e = NULL;
authorStefan Metzmacher <metze@samba.org>
Wed, 30 Sep 2020 22:27:51 +0000 (00:27 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 30 Sep 2020 22:27:51 +0000 (00:27 +0200)
source3/smbd/smb2_server.c

index 542f99af7578ea56372d0ed1a1495d594d975071..8d3dd74a4bf4768e2f23eb2b8a0306825a257a89 100644 (file)
@@ -4602,9 +4602,10 @@ static int socket_error_from_errno(int ret,
 }
 
 static NTSTATUS smbd_smb2_advance_send_queue(struct smbXsrv_connection *xconn,
-                                            struct smbd_smb2_send_queue *e,
+                                            struct smbd_smb2_send_queue **_e,
                                             size_t n)
 {
+       struct smbd_smb2_send_queue *e = *_e;
        bool ok;
 
        xconn->ack.unacked_bytes += n;
@@ -4622,6 +4623,7 @@ static NTSTATUS smbd_smb2_advance_send_queue(struct smbXsrv_connection *xconn,
        DLIST_REMOVE(xconn->smb2.send_queue, e);
 
        if (e->ack.req == NULL) {
+               *_e = NULL;
                talloc_free(e->mem_ctx);
                return NT_STATUS_OK;
        }
@@ -4723,7 +4725,7 @@ static NTSTATUS smbd_smb2_flush_with_sendmsg(struct smbXsrv_connection *xconn)
                        return status;
                }
 
-               status = smbd_smb2_advance_send_queue(xconn, e, ret);
+               status = smbd_smb2_advance_send_queue(xconn, &e, ret);
                if (NT_STATUS_EQUAL(status, NT_STATUS_RETRY)) {
                        /* retry later */
                        TEVENT_FD_WRITEABLE(xconn->transport.fde);