svn commit: samba r7800 - in branches/SAMBA_4_0/source/rpc_server: .

tridge at samba.org tridge at samba.org
Tue Jun 21 06:03:11 GMT 2005


Author: tridge
Date: 2005-06-21 06:03:11 +0000 (Tue, 21 Jun 2005)
New Revision: 7800

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=7800

Log:
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

Modified:
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h
   branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2005-06-21 05:27:09 UTC (rev 7799)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2005-06-21 06:03:11 UTC (rev 7800)
@@ -320,6 +320,7 @@
 	p->auth_state.session_info = NULL;
 	p->auth_state.session_key = dcesrv_generic_session_key;
 	p->srv_conn = srv_conn;
+	p->processing = False;
 
 	talloc_set_destructor(p, dcesrv_endpoint_destructor);
 

Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h	2005-06-21 05:27:09 UTC (rev 7799)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h	2005-06-21 06:03:11 UTC (rev 7800)
@@ -177,6 +177,8 @@
 
 	/* the transport level session key */
 	DATA_BLOB transport_session_key;
+
+	BOOL processing;
 };
 
 

Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c	2005-06-21 05:27:09 UTC (rev 7799)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c	2005-06-21 06:03:11 UTC (rev 7800)
@@ -87,6 +87,11 @@
 	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 @@
 
 	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;



More information about the samba-cvs mailing list