Author: metze
Date: 2007-04-23 12:31:12 +0000 (Mon, 23 Apr 2007)
New Revision: 22486

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22486

Log:
add a flag to ignore timeouts of a request and don't close
the connection on timeout

metze
Modified:
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc.c
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc.h
   branches/SAMBA_4_0/source/torture/rpc/echo.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc.c       2007-04-23 10:39:20 UTC 
(rev 22485)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc.c       2007-04-23 12:31:12 UTC 
(rev 22486)
@@ -673,6 +673,17 @@
                                   struct timeval t, void *private)
 {
        struct rpc_request *req = talloc_get_type(private, struct rpc_request);
+
+       if (req->ignore_timeout) {
+               dcerpc_req_dequeue(req);
+               req->state = RPC_REQUEST_DONE;
+               req->status = NT_STATUS_IO_TIMEOUT;
+               if (req->async.callback) {
+                       req->async.callback(req);
+               }
+               return;
+       }
+
        dcerpc_connection_dead(req->p->conn, NT_STATUS_IO_TIMEOUT);
 }
 
@@ -945,6 +956,7 @@
        req->flags = 0;
        req->fault_code = 0;
        req->async_call = async;
+       req->ignore_timeout = False;
        req->async.callback = NULL;
        req->async.private = NULL;
        req->recv_handler = NULL;

Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc.h
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc.h       2007-04-23 10:39:20 UTC 
(rev 22485)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc.h       2007-04-23 12:31:12 UTC 
(rev 22486)
@@ -246,6 +246,7 @@
        uint16_t opnum;
        DATA_BLOB request_data;
        BOOL async_call;
+       BOOL ignore_timeout;
 
        /* use by the ndr level async recv call */
        struct {

Modified: branches/SAMBA_4_0/source/torture/rpc/echo.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/echo.c        2007-04-23 10:39:20 UTC 
(rev 22485)
+++ branches/SAMBA_4_0/source/torture/rpc/echo.c        2007-04-23 12:31:12 UTC 
(rev 22486)
@@ -388,8 +388,12 @@
        r.in.seconds = 2;
        p->request_timeout = 1;
 
-       torture_assert(tctx, req = dcerpc_echo_TestSleep_send(p, tctx, &r), 
-               "Failed to send async sleep request");
+       req = dcerpc_echo_TestSleep_send(p, tctx, &r);
+       if (!req) {
+               torture_comment(tctx, "Failed to send async sleep request\n");
+               goto failed;
+       }
+       req->ignore_timeout = True;
 
        status  = dcerpc_ndr_request_recv(req);
        torture_assert_ntstatus_equal(tctx, status, NT_STATUS_IO_TIMEOUT, 
@@ -408,6 +412,7 @@
                torture_comment(tctx, "Failed to send async sleep request\n");
                goto failed;
        }
+       req->ignore_timeout = True;
        status  = dcerpc_ndr_request_recv(req);
        torture_assert_ntstatus_equal(tctx, status, NT_STATUS_IO_TIMEOUT, 
                "request should have timed out");

Reply via email to