]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
cns.c:
authorRichard Basch <probe@mit.edu>
Fri, 7 Feb 1997 13:55:01 +0000 (13:55 +0000)
committerRichard Basch <probe@mit.edu>
Fri, 7 Feb 1997 13:55:01 +0000 (13:55 +0000)
Declare blocking_hook_proc with __export keyword so that it
  works with Win16.  Win32 will only generate a warning message.
Reworked timeout logic to accomodate the 49.7 day wraparound
  of GetTickCount()

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@9813 dc483132-0cff-0310-8789-dd5450dbe970

src/windows/cns/ChangeLog
src/windows/cns/cns.c

index 1fd2a5eec312930812576c5316a9c67d9e7abe06..d07b3d58997ffffb15dbe896cc37b08e4b707a56 100644 (file)
@@ -1,3 +1,9 @@
+Fri Feb  7 08:08:39 1997  Richard Basch  <basch@lehman.com>
+
+       * cns.c (blocking_hook_proc): Additional logic is required to
+               prevent instantaneous timeouts when GetTickCount()
+               wraps every 49.7 days.
+
 Sun Feb  2 11:22:57 1997  Richard Basch  <basch@lehman.com>
 
        * cns.c (k5_name_from_ccache):
index 021cc88abe1f0d1c6cab14f01057d9f6971ed008..15e4554b04275dad953c39f32c802bc90653fd13 100644 (file)
@@ -55,6 +55,7 @@ BOOL alert;                          /* Actions on ticket expiration */
 BOOL beep;
 static BOOL alerted;                  /* TRUE when user already alerted */
 BOOL isblocking = FALSE;              /* TRUE when blocked in WinSock */
+static DWORD blocking_timeout;        /* Blocking timeout */
 static DWORD blocking_end_time;               /* Ending count for blocking timeout */
 static FARPROC hook_instance;         /* handle for blocking hook function */
 
@@ -75,13 +76,21 @@ krb5_ccache k5_ccache;
  *
  * Returns: TRUE if we got and dispatched a message, FALSE otherwise.
  */
-BOOL CALLBACK
+BOOL __export CALLBACK
 blocking_hook_proc(void)
 {
   MSG msg;
   BOOL rc;
+  DWORD now;
 
-  if (GetTickCount() > blocking_end_time) {
+  /*
+   * The additional timeout logic is required because GetTickCount will
+   * wrap approximately every 49.7 days.
+   */
+  now = GetTickCount();
+  if (now >= blocking_end_time &&
+      (blocking_end_time >= blocking_end_time - blocking_timeout ||
+       now < blocking_end_time - blocking_timeout)) {
     WSACancelBlockingCall();
     return FALSE;
   }
@@ -118,7 +127,8 @@ start_blocking_hook(int timeout)
     return;
 
   isblocking = TRUE;
-  blocking_end_time = GetTickCount() + (1000 * timeout);
+  blocking_timeout = 1000 * timeout;
+  blocking_end_time = GetTickCount() + blocking_timeout;
 #ifdef _WIN32
   proc = WSASetBlockingHook(blocking_hook_proc);
 #else