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");