summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/oplock.c10
-rw-r--r--source3/smbd/process.c4
2 files changed, 8 insertions, 6 deletions
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 6a47791300..9bc7d64381 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -99,6 +99,11 @@ BOOL receive_local_message( char *buffer, int buffer_len, int timeout)
if (selrtn == -1 && errno == EINTR) {
+ /* could be a kernel oplock interrupt */
+ if (koplocks && koplocks->msg_waiting(&fds)) {
+ return koplocks->receive_message(&fds, buffer, buffer_len);
+ }
+
/*
* Linux 2.0.x seems to have a bug in that
* it can return -1, EINTR with a timeout of zero.
@@ -111,11 +116,6 @@ BOOL receive_local_message( char *buffer, int buffer_len, int timeout)
return False;
}
-
- /* could be a kernel oplock interrupt */
- if (koplocks && koplocks->msg_waiting(&fds)) {
- return koplocks->receive_message(&fds, buffer, buffer_len);
- }
/* Not a kernel interrupt - could be a SIGUSR1 message. We must restart. */
/* We need to decrement the timeout here. */
timeout -= ((time(NULL) - starttime)*1000);
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 53f9ff035f..010b188701 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -111,8 +111,10 @@ BOOL push_oplock_pending_smb_message(char *buf, int msg_len)
static void async_processing(char *buffer, int buffer_len)
{
+ DEBUG(10,("async_processing: Doing async processing.\n"));
+
/* check for oplock messages (both UDP and kernel) */
- if (receive_local_message(buffer, buffer_len, 0)) {
+ if (receive_local_message(buffer, buffer_len, 1)) {
process_local_message(buffer, buffer_len);
}