diff options
Diffstat (limited to 'source4/rpc_server/dcerpc_sock.c')
-rw-r--r-- | source4/rpc_server/dcerpc_sock.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/source4/rpc_server/dcerpc_sock.c b/source4/rpc_server/dcerpc_sock.c index db709ac5e9..130f85c0ee 100644 --- a/source4/rpc_server/dcerpc_sock.c +++ b/source4/rpc_server/dcerpc_sock.c @@ -87,6 +87,11 @@ static void dcesrv_sock_recv(struct stream_connection *conn, uint16_t flags) DATA_BLOB tmp_blob; size_t nread; + if (dce_conn->processing) { + EVENT_FD_NOT_READABLE(conn->event.fde); + return; + } + tmp_blob = data_blob_talloc(conn->socket, NULL, 0x1000); if (tmp_blob.data == NULL) { dcesrv_terminate_connection(dce_conn, "out of memory"); @@ -105,9 +110,13 @@ static void dcesrv_sock_recv(struct stream_connection *conn, uint16_t flags) tmp_blob.length = nread; + dce_conn->processing = True; status = dcesrv_input(dce_conn, &tmp_blob); + dce_conn->processing = False; talloc_free(tmp_blob.data); + EVENT_FD_READABLE(conn->event.fde); + if (!NT_STATUS_IS_OK(status)) { dcesrv_terminate_connection(dce_conn, nt_errstr(status)); return; |