r11671: - make sure req is initialized
authorStefan Metzmacher <metze@samba.org>
Fri, 11 Nov 2005 08:00:51 +0000 (08:00 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:46:10 +0000 (13:46 -0500)
- only free the buffer when there's no request
- call async callback on error

metze
(This used to be commit 2084d62dd54c230c6494e482cb346b3ea959e6fb)

source4/libcli/smb2/transport.c

index 97408b2ae3ac93602c1a4496351d4693b3a64b37..9940379f982dbb48101de52eea3bff4425a49aa7 100644 (file)
@@ -145,7 +145,7 @@ static NTSTATUS smb2_transport_finish_recv(void *private, DATA_BLOB blob)
                                                             struct smb2_transport);
        uint8_t *buffer, *hdr;
        int len;
-       struct smb2_request *req;
+       struct smb2_request *req = NULL;
        uint64_t seqnum;
 
        buffer = blob.data;
@@ -197,12 +197,16 @@ static NTSTATUS smb2_transport_finish_recv(void *private, DATA_BLOB blob)
        return NT_STATUS_OK;
 
 error:
+       dump_data(2, buffer, len);
        if (req) {
                DLIST_REMOVE(transport->pending_recv, req);
                req->state = SMB2_REQUEST_ERROR;
+               if (req->async.fn) {
+                       req->async.fn(req);
+               }
+       } else {
+               talloc_free(buffer);
        }
-       dump_data(2, blob.data, blob.length);
-       data_blob_free(&blob);
        return NT_STATUS_UNSUCCESSFUL;
 }
 
@@ -210,7 +214,7 @@ error:
   handle timeouts of individual smb requests
 */
 static void smb2_timeout_handler(struct event_context *ev, struct timed_event *te, 
-                                  struct timeval t, void *private)
+                                struct timeval t, void *private)
 {
        struct smb2_request *req = talloc_get_type(private, struct smb2_request);