mirror of
https://github.com/samba-team/samba.git
synced 2025-08-29 13:49:30 +03:00
r22486: add a flag to ignore timeouts of a request and don't close
the connection on timeout metze
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
0a8b4c328d
commit
6b23ab1fd2
@ -673,6 +673,17 @@ static void dcerpc_timeout_handler(struct event_context *ev, struct timed_event
|
||||
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 @@ static struct rpc_request *dcerpc_request_send(struct dcerpc_pipe *p,
|
||||
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;
|
||||
|
@ -246,6 +246,7 @@ struct rpc_request {
|
||||
uint16_t opnum;
|
||||
DATA_BLOB request_data;
|
||||
BOOL async_call;
|
||||
BOOL ignore_timeout;
|
||||
|
||||
/* use by the ndr level async recv call */
|
||||
struct {
|
||||
|
@ -388,8 +388,12 @@ static bool test_timeout(struct torture_context *tctx,
|
||||
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 @@ static bool test_timeout(struct torture_context *tctx,
|
||||
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");
|
||||
|
Reference in New Issue
Block a user