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) {