]> asedeno.scripts.mit.edu Git - PuTTY_svn.git/commitdiff
Improve scheduling on the Mac:
authorBen Harris <bjh21@bjh21.me.uk>
Sat, 1 Mar 2003 15:12:03 +0000 (15:12 +0000)
committerBen Harris <bjh21@bjh21.me.uk>
Sat, 1 Mar 2003 15:12:03 +0000 (15:12 +0000)
1: Only update the screen when there's nothing else to do.  This means that
it's a lot harder for a fast typist to outrun PuTTY.
2: Only sleep for at most 100ms at a time.  This is a kludge to work around
the WakeUpProcess caused by incoming data can happen before the
WaitNextEvent it's meant to interrupt, leading to PuTTY sleeping forever
because it doesn't know there's network data pending.

git-svn-id: http://svn.tartarus.org/sgt/putty@2901 cda61777-01e9-0310-a592-d414129be87e

mac/mac.c
mac/mac.h

index a9a327f433974d030a3da5137ebf9d4dc460ff27..6b418388b64c0d7fbce112a54972049f098a9b64 100644 (file)
--- a/mac/mac.c
+++ b/mac/mac.c
@@ -1,4 +1,4 @@
-/* $Id: mac.c,v 1.52 2003/02/27 23:34:59 ben Exp $ */
+/* $Id: mac.c,v 1.53 2003/03/01 15:12:03 ben Exp $ */
 /*
  * Copyright (c) 1999, 2003 Ben Harris
  * All rights reserved.
@@ -68,6 +68,7 @@ Session *sesslist;
 static int cold = 1;
 static int borednow = FALSE;
 struct mac_gestalts mac_gestalts;
+UInt32 sleeptime;
 
 static void mac_startup(void);
 static void mac_eventloop(void);
@@ -244,16 +245,26 @@ static void mac_eventloop(void) {
     RgnHandle cursrgn;
 
     cursrgn = NewRgn();
+    sleeptime = 0;
     for (;;) {
        mac_adjustcursor(cursrgn);
-       gotevent = WaitNextEvent(everyEvent, &event, LONG_MAX, cursrgn);
+       gotevent = WaitNextEvent(everyEvent, &event, sleeptime, cursrgn);
+       /*
+        * XXX For now, limit sleep time to 1/10 s to work around
+        * wake-before-sleep race in MacTCP code.
+        */
+       sleeptime = 6;
        mac_adjustcursor(cursrgn);
-       if (gotevent)
+       if (gotevent) {
+           /* Ensure we get a null event when the real ones run out. */
+           sleeptime = 0;
            mac_event(&event);
-       if (borednow)
-           cleanup_exit(0);
+           if (borednow)
+               cleanup_exit(0);
+       }
        sk_poll();
-       mac_pollterm();
+       if (!gotevent)
+           mac_pollterm();
     }
     DisposeRgn(cursrgn);
 }
index febce2f36e28bd4081ca66f0f61cddb60d87f776..07c8513b590e41d4b7a2a6ba8a598ca9e166c30c 100644 (file)
--- a/mac/mac.h
+++ b/mac/mac.h
@@ -34,6 +34,7 @@ struct mac_gestalts {
 };
 
 extern struct mac_gestalts mac_gestalts;
+extern UInt32 sleeptime;
 
 #if TARGET_RT_MAC_CFM
 /* All systems that can use CFM have Color QuickDraw */