summaryrefslogtreecommitdiff
path: root/source4/librpc/rpc
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2007-04-23 12:31:12 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:51:32 -0500
commitf66bd1ae54c2d69b84790f4a2a860d4a3c65873e (patch)
tree3d5caad1872cc93d999197136021e41347664248 /source4/librpc/rpc
parentd7b01752491b0cd4389d1f29f1a17c1ab4394357 (diff)
downloadsamba-f66bd1ae54c2d69b84790f4a2a860d4a3c65873e.tar.gz
samba-f66bd1ae54c2d69b84790f4a2a860d4a3c65873e.tar.bz2
samba-f66bd1ae54c2d69b84790f4a2a860d4a3c65873e.zip
r22486: add a flag to ignore timeouts of a request and don't close
the connection on timeout metze (This used to be commit 6b23ab1fd265e2a92456701fb02bd1838c098874)
Diffstat (limited to 'source4/librpc/rpc')
-rw-r--r--source4/librpc/rpc/dcerpc.c12
-rw-r--r--source4/librpc/rpc/dcerpc.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index 79e897313d..e422fa5444 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -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;
diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h
index c6dbc35477..ea6c68b28e 100644
--- a/source4/librpc/rpc/dcerpc.h
+++ b/source4/librpc/rpc/dcerpc.h
@@ -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 {