Author: ab Date: 2006-06-10 08:29:25 +0000 (Sat, 10 Jun 2006) New Revision: 16134
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16134 Log: Missing part of messaging rewrite by Aleksey Fedoseev <[EMAIL PROTECTED]> Modified: branches/tmp/vl-messaging/source/smbd/process.c branches/tmp/vl-messaging/source/smbd/server.c Changeset: Modified: branches/tmp/vl-messaging/source/smbd/process.c =================================================================== --- branches/tmp/vl-messaging/source/smbd/process.c 2006-06-10 08:28:18 UTC (rev 16133) +++ branches/tmp/vl-messaging/source/smbd/process.c 2006-06-10 08:29:25 UTC (rev 16134) @@ -351,7 +351,7 @@ static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout) { - fd_set fds; + fd_set fds, wfds; int selrtn; struct timeval to; int maxfd = 0; @@ -415,10 +415,11 @@ } /* - * Setup the select read fd set. + * Setup select read and write fd sets. */ FD_ZERO(&fds); + FD_ZERO(&wfds); /* * Ensure we process oplock break messages by preference. @@ -462,7 +463,9 @@ maxfd = select_on_fd(change_notify_fd(), maxfd, &fds); maxfd = select_on_fd(oplock_notify_fd(), maxfd, &fds); - selrtn = sys_select(maxfd+1,&fds,NULL,NULL,&to); + message_select_setup(&maxfd, &fds, &wfds); + + selrtn = sys_select(maxfd+1,&fds,&wfds,NULL,&to); /* if we get EINTR then maybe we have received an oplock signal - treat this as select returning 1. This is ugly, but @@ -491,6 +494,12 @@ return False; } + /* Only messaging events - return timeout */ + if(message_receive(&fds, &wfds) == selrtn) { + smb_read_error = READ_TIMEOUT; + return False; + } + /* * Ensure we process oplock break messages by preference. * This is IMPORTANT ! Otherwise we can starve other processes Modified: branches/tmp/vl-messaging/source/smbd/server.c =================================================================== --- branches/tmp/vl-messaging/source/smbd/server.c 2006-06-10 08:28:18 UTC (rev 16133) +++ branches/tmp/vl-messaging/source/smbd/server.c 2006-06-10 08:29:25 UTC (rev 16134) @@ -383,7 +383,7 @@ for each incoming connection */ DEBUG(2,("waiting for a connection\n")); while (1) { - fd_set lfds; + fd_set lfds, wfds; int num; /* Free up temporary memory from the main smbd. */ @@ -394,8 +394,11 @@ memcpy((char *)&lfds, (char *)&listen_set, sizeof(listen_set)); + FD_ZERO(&wfds); + + message_select_setup(&maxfd, &lfds, &wfds); - num = sys_select(maxfd+1,&lfds,NULL,NULL,NULL); + num = sys_select(maxfd+1,&lfds,&wfds,NULL,NULL); if (num == -1 && errno == EINTR) { if (got_sig_term) { @@ -412,6 +415,9 @@ continue; } + + /* don't process messaging sockets twice */ + num -= message_receive(&lfds, &wfds); /* check if we need to reload services */ check_reload(time(NULL)); @@ -480,6 +486,8 @@ DEBUG(0,("tdb_reopen_all failed.\n")); smb_panic("tdb_reopen_all failed."); } + /* We should reinitialize messaging socket */ + message_reinit(); return True; } @@ -647,6 +655,7 @@ locking_end(); printing_end(); + message_end(); if (how != SERVER_EXIT_NORMAL) { int oldlevel = DEBUGLEVEL;