diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-11-24 11:24:33 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:06:07 -0500 |
commit | 3fd0f21cd9babe49281205705abe5b7a8175ad74 (patch) | |
tree | 4742eac8473153b1db80479bc85b088168c4a64b /source4 | |
parent | f2a605eeab5752e4884987496f2661368f85b271 (diff) | |
download | samba-3fd0f21cd9babe49281205705abe5b7a8175ad74.tar.gz samba-3fd0f21cd9babe49281205705abe5b7a8175ad74.tar.bz2 samba-3fd0f21cd9babe49281205705abe5b7a8175ad74.zip |
r3941: make sure we don't keep pounding on a ncacn_ip_tcp connection after it is dead
(This used to be commit f0263672fd1eb79bfa3a94663de1cea996c92880)
Diffstat (limited to 'source4')
-rw-r--r-- | source4/librpc/rpc/dcerpc_sock.c | 6 | ||||
-rw-r--r-- | source4/torture/rpc/countcalls.c | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/source4/librpc/rpc/dcerpc_sock.c b/source4/librpc/rpc/dcerpc_sock.c index 361d0d4a5f..8de43d8454 100644 --- a/source4/librpc/rpc/dcerpc_sock.c +++ b/source4/librpc/rpc/dcerpc_sock.c @@ -73,6 +73,8 @@ static void sock_dead(struct dcerpc_pipe *p, NTSTATUS status) if (!NT_STATUS_IS_OK(status)) { p->transport.recv_data(p, NULL, status); } + + sock->fde->flags &= ~(EVENT_FD_WRITE | EVENT_FD_READ); } /* @@ -230,6 +232,10 @@ static NTSTATUS sock_send_request(struct dcerpc_pipe *p, DATA_BLOB *data, BOOL t struct sock_private *sock = p->transport.private; struct sock_blob *blob; + if (sock->sock == NULL) { + return NT_STATUS_CONNECTION_DISCONNECTED; + } + blob = talloc_p(sock, struct sock_blob); if (blob == NULL) { return NT_STATUS_NO_MEMORY; diff --git a/source4/torture/rpc/countcalls.c b/source4/torture/rpc/countcalls.c index 4d3e729980..d42729769a 100644 --- a/source4/torture/rpc/countcalls.c +++ b/source4/torture/rpc/countcalls.c @@ -59,6 +59,9 @@ BOOL torture_rpc_countcalls(void) status = dcerpc_request(p, NULL, i, p, &stub_in, &stub_out); if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT) && p->last_fault_code == DCERPC_FAULT_OP_RNG_ERROR) break; + if (NT_STATUS_EQUAL(status, NT_STATUS_CONNECTION_DISCONNECTED)) { + break; + } } if (i==5000) { |