svn commit: samba r3021 - in branches/SAMBA_4_0/source/torture/local: .

tridge at samba.org tridge at samba.org
Sun Oct 17 13:22:37 GMT 2004


Author: tridge
Date: 2004-10-17 13:22:37 +0000 (Sun, 17 Oct 2004)
New Revision: 3021

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/torture/local&rev=3021&nolog=1

Log:
under heavy load the listen queue for messaging unix domain socket can fill up, leading to refused
connections. The caller needs to retry. This adds testing of the retry in LOCAL-MESSAGING







Modified:
   branches/SAMBA_4_0/source/torture/local/messaging.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/local/messaging.c
===================================================================
--- branches/SAMBA_4_0/source/torture/local/messaging.c	2004-10-17 13:21:24 UTC (rev 3020)
+++ branches/SAMBA_4_0/source/torture/local/messaging.c	2004-10-17 13:22:37 UTC (rev 3021)
@@ -22,6 +22,17 @@
 
 #include "includes.h"
 
+enum {MY_PING=1000, MY_PONG, MY_EXIT};
+
+static void ping_message(void *msg_ctx, void *private, 
+			 uint32_t msg_type, servid_t src, DATA_BLOB *data)
+{
+	NTSTATUS status;
+	do {
+		status = messaging_send(msg_ctx, src, MY_PONG, data);
+	} while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES));
+}
+
 static void pong_message(void *msg_ctx, void *private, 
 			 uint32_t msg_type, servid_t src, DATA_BLOB *data)
 {
@@ -49,7 +60,8 @@
 
 	if (fork() == 0) {
 		void *msg_ctx2 = messaging_init(mem_ctx, 1, ev);
-		messaging_register(msg_ctx2, mem_ctx, -1, exit_message);
+		messaging_register(msg_ctx2, NULL, MY_PING, ping_message);
+		messaging_register(msg_ctx2, mem_ctx, MY_EXIT, exit_message);
 		event_loop_wait(ev);
 		exit(0);
 	}
@@ -58,7 +70,7 @@
 
 	msg_ctx = messaging_init(mem_ctx, 2, ev);
 
-	messaging_register(msg_ctx, &pong_count, MSG_PONG, pong_message);
+	messaging_register(msg_ctx, &pong_count, MY_PONG, pong_message);
 
 	start_timer();
 
@@ -70,23 +82,23 @@
 		data.data = discard_const_p(char, "testing");
 		data.length = strlen(data.data);
 
-		status1 = messaging_send(msg_ctx, 1, MSG_PING, &data);
-		status2 = messaging_send(msg_ctx, 1, MSG_PING, NULL);
+		status1 = messaging_send(msg_ctx, 1, MY_PING, &data);
+		status2 = messaging_send(msg_ctx, 1, MY_PING, NULL);
 
-		if (!NT_STATUS_IS_OK(status1)) {
-			printf("Failed to send msg1 (%s) (done %d)\n", nt_errstr(status1), ping_count);
-		} else {
+		if (NT_STATUS_IS_OK(status1)) {
 			ping_count++;
 		}
 
-		if (!NT_STATUS_IS_OK(status2)) {
-			printf("Failed to send msg2 (%s) (done %d)\n", nt_errstr(status2), ping_count);
-		} else {
+		if (NT_STATUS_IS_OK(status2)) {
 			ping_count++;
 		}
 
-		while (pong_count < ping_count) {
+		while (ping_count > pong_count + 20) {
 			event_loop_once(ev);
+			event_loop_once(ev);
+			event_loop_once(ev);
+			event_loop_once(ev);
+			event_loop_once(ev);
 		}
 	}
 
@@ -97,7 +109,7 @@
 	}
 
 	printf("sending exit\n");
-	messaging_send(msg_ctx, 1, -1, NULL);
+	messaging_send(msg_ctx, 1, MY_EXIT, NULL);
 	event_loop_once(ev);
 
 	if (ping_count != pong_count) {



More information about the samba-cvs mailing list