From f0420c029299fd503dd6980484e970a9a141d523 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 21 Jun 2005 06:03:11 +0000 Subject: r7800: added the same request serialisation logic to our socket based rpc servers as I added to the smb server yesterday. This means rpc server code can assume it runs serially unless it explicitly sets the async flag on the request and returns (This used to be commit 8546adb56aa4dda608a176409c243b074aeca77d) --- source4/rpc_server/dcerpc_sock.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'source4/rpc_server/dcerpc_sock.c') 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; -- cgit