]> git.eshelyaron.com Git - emacs.git/commitdiff
[MAC_OSX] (select_and_poll_event, sys_select): Fix last changes.
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Fri, 24 Aug 2007 08:51:18 +0000 (08:51 +0000)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Fri, 24 Aug 2007 08:51:18 +0000 (08:51 +0000)
src/ChangeLog
src/mac.c

index 164a6c19d6058518279f5a50f1f48293d01bca30..ab10c92d2864be0f0ac8803641805899265e6515 100644 (file)
@@ -1,3 +1,7 @@
+2007-08-24  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * mac.c [MAC_OSX] (select_and_poll_event, sys_select): Fix last changes.
+
 2007-08-24  Martin Rudalics  <rudalics@gmx.at>
 
        * fileio.c (Finsert_file_contents): Consult CHARS_MODIFF to tell
index b94e80c054f334704e8f623f128e8e7628d334b8..75a606b60b3f47c6ca5bd9844fd9d938f3b30111 100644 (file)
--- a/src/mac.c
+++ b/src/mac.c
@@ -4989,8 +4989,8 @@ extern int noninteractive;
       SELECT_TIMEOUT_THRESHOLD_RUNLOOP seconds).
       -> Create CFSocket for each socket and add it into the current
          event RunLoop so that the current event loop gets quit when
-         the socket becomes ready.  Then ReceiveNextEvent can wait for
-         both kinds of inputs.
+         the socket becomes ready.  Then CFRunLoopRunInMode can wait
+         for both kinds of inputs.
    4. Otherwise.
       -> Periodically poll the window input channel while repeatedly
          executing `select' with a short timeout
@@ -5029,32 +5029,51 @@ select_and_poll_event (nfds, rfds, wfds, efds, timeout)
      ? (EMACS_SECS (*timeout) * kEventDurationSecond
        + EMACS_USECS (*timeout) * kEventDurationMicrosecond)
      : kEventDurationForever);
+  SELECT_TYPE orfds, owfds, oefds;
+
+  if (timeout == NULL)
+    {
+      if (rfds) orfds = *rfds;
+      if (wfds) owfds = *wfds;
+      if (efds) oefds = *efds;
+    }
 
   /* Try detect_input_pending before CFRunLoopRunInMode in the same
      BLOCK_INPUT block, in case that some input has already been read
      asynchronously.  */
   BLOCK_INPUT;
-  do
+  while (1)
     {
       if (detect_input_pending ())
        break;
 
       EMACS_SET_SECS_USECS (select_timeout, 0, 0);
       r = select (nfds, rfds, wfds, efds, &select_timeout);
+      if (r != 0)
+       break;
+
       if (timeoutval == 0.0)
        timedout_p = 1;
-      else if (r == 0)
+      else
        {
 #if USE_CG_DRAWING
          mac_prepare_for_quickdraw (NULL);
 #endif
          if (CFRunLoopRunInMode (kCFRunLoopDefaultMode,
-                                 timeoutval >= 0 ? timeoutval : 10000.0, true)
+                                 timeoutval >= 0 ? timeoutval : 100000, true)
              == kCFRunLoopRunTimedOut)
            timedout_p = 1;
        }
+
+      if (timeout == NULL && timedout_p)
+       {
+         if (rfds) *rfds = orfds;
+         if (wfds) *wfds = owfds;
+         if (efds) *efds = oefds;
+       }
+      else
+       break;
     }
-  while (timeoutval < 0 && timedout_p);
   UNBLOCK_INPUT;
 
   if (r != 0)
@@ -5181,7 +5200,7 @@ sys_select (nfds, rfds, wfds, efds, timeout)
          mac_prepare_for_quickdraw (NULL);
 #endif
          if (CFRunLoopRunInMode (kCFRunLoopDefaultMode,
-                                 timeoutval >= 0 ? timeoutval : 10000.0, true)
+                                 timeoutval >= 0 ? timeoutval : 100000, true)
              == kCFRunLoopRunTimedOut)
            timedout_p = 1;