svn commit: samba r10650 - in branches/tmp/vl-cluster/source: lib
nmbd torture utils
vlendec at samba.org
vlendec at samba.org
Fri Sep 30 11:56:41 GMT 2005
Author: vlendec
Date: 2005-09-30 11:56:39 +0000 (Fri, 30 Sep 2005)
New Revision: 10650
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10650
Log:
Send non-local messages via the dispatcher, allow message_select_dispatch wait
for a timeout
Volker
Modified:
branches/tmp/vl-cluster/source/lib/messages.c
branches/tmp/vl-cluster/source/nmbd/nmbd.c
branches/tmp/vl-cluster/source/torture/msgtest.c
branches/tmp/vl-cluster/source/utils/smbcontrol.c
Changeset:
Modified: branches/tmp/vl-cluster/source/lib/messages.c
===================================================================
--- branches/tmp/vl-cluster/source/lib/messages.c 2005-09-30 11:18:29 UTC (rev 10649)
+++ branches/tmp/vl-cluster/source/lib/messages.c 2005-09-30 11:56:39 UTC (rev 10650)
@@ -315,6 +315,10 @@
memcpy(packet.data + sizeof(struct message_rec), buf, len);
}
+ if (!procid_is_local(&hdr->dest)) {
+ goto via_stream;
+ }
+
ZERO_STRUCT(sunaddr);
sunaddr.sun_family = AF_UNIX;
strncpy(sunaddr.sun_path, message_path(&pid),
@@ -350,6 +354,7 @@
"dispatcher in blocking mode\n"));
}
+ via_stream:
if ((stream_fd < 0) && !init_stream_socket()) {
DEBUG(5, ("No stream socket\n"));
goto done;
@@ -618,15 +623,14 @@
return result;
}
-void message_select_dispatch(void)
+void message_select_dispatch(struct timeval *tv)
{
fd_set rfds;
int maxfd = 0;
- struct timeval tv = timeval_zero();
FD_ZERO(&rfds);
message_select_setup(&maxfd, &rfds);
- if (sys_select(maxfd+1, &rfds, NULL, NULL, &tv) > 0) {
+ if (sys_select(maxfd+1, &rfds, NULL, NULL, tv) > 0) {
message_dispatch(&rfds);
}
}
Modified: branches/tmp/vl-cluster/source/nmbd/nmbd.c
===================================================================
--- branches/tmp/vl-cluster/source/nmbd/nmbd.c 2005-09-30 11:18:29 UTC (rev 10649)
+++ branches/tmp/vl-cluster/source/nmbd/nmbd.c 2005-09-30 11:56:39 UTC (rev 10650)
@@ -392,7 +392,10 @@
/* Check for internal messages */
- message_select_dispatch();
+ {
+ struct timeval null = timeval_zero();
+ message_select_dispatch(&null);
+ }
/*
* Check all broadcast subnets to see if
Modified: branches/tmp/vl-cluster/source/torture/msgtest.c
===================================================================
--- branches/tmp/vl-cluster/source/torture/msgtest.c 2005-09-30 11:18:29 UTC (rev 10649)
+++ branches/tmp/vl-cluster/source/torture/msgtest.c 2005-09-30 11:56:39 UTC (rev 10650)
@@ -35,7 +35,7 @@
int main(int argc, char *argv[])
{
- pid_t pid;
+ struct process_id pid;
int i, n;
char *buf;
@@ -50,9 +50,9 @@
}
if (strcmp(argv[1], "self") == 0) {
- pid = getpid();
+ pid = procid_self();
} else {
- pid = atoi(argv[1]);
+ pid = interpret_pid(argv[1]);
}
n = atoi(argv[2]);
@@ -70,9 +70,11 @@
for (i=0;i<n;i++) {
fd_set rfds;
int maxfd;
+ size_t size = 1024*512;
FD_ZERO(&rfds);
- message_send_pid(pid_to_procid(pid), MSG_PING, NULL, 0,
- True);
+ buf=SMB_MALLOC(size);
+ memset(buf, 0, size);
+ message_send_pid(pid, MSG_PING, buf, size, True);
message_select_setup(&maxfd, &rfds);
if (select(maxfd+1, &rfds, NULL, NULL, NULL) <= 0)
break;
@@ -80,13 +82,8 @@
}
while (pong_count < n) {
- fd_set rfds;
- int maxfd;
- FD_ZERO(&rfds);
- message_select_setup(&maxfd, &rfds);
- if (select(maxfd+1, &rfds, NULL, NULL, NULL) <= 0)
- break;
- message_dispatch(&rfds);
+ struct timeval tv = timeval_set(5, 0);
+ message_select_dispatch(&tv);
}
DEBUG(0, ("expected %d, got back %d\n", n, pong_count));
Modified: branches/tmp/vl-cluster/source/utils/smbcontrol.c
===================================================================
--- branches/tmp/vl-cluster/source/utils/smbcontrol.c 2005-09-30 11:18:29 UTC (rev 10649)
+++ branches/tmp/vl-cluster/source/utils/smbcontrol.c 2005-09-30 11:56:39 UTC (rev 10650)
@@ -76,10 +76,11 @@
busy-wait here as there is no nicer way to do it. */
do {
- message_select_dispatch();
- if (num_replies > 0 && !multiple_replies)
- break;
- sleep(1);
+ struct timeval tmo;
+ tmo = timeval_set(timeout - (time(NULL) - start_time), 0);
+ message_select_dispatch(&tmo);
+ if (num_replies > 0 && !multiple_replies)
+ break;
} while (timeout - (time(NULL) - start_time) > 0);
}
More information about the samba-cvs
mailing list