On Win32, make minimum setitimer() sleep be 1ms, so sleeps < 1ms aren't
authorBruce Momjian <[email protected]>
Wed, 9 Aug 2006 20:41:07 +0000 (20:41 +0000)
committerBruce Momjian <[email protected]>
Wed, 9 Aug 2006 20:41:07 +0000 (20:41 +0000)
rounded down to zero.

Backpatch to 8.1.X.

src/backend/port/win32/timer.c

index b8f1e8bd686e11aee9ac1764ab3ce8c6f9c25345..048bebb058d99dbf3d738bbc36ab9d6475ea233b 100644 (file)
@@ -56,8 +56,14 @@ pg_timer_thread(LPVOID param)
                                timerCommArea.value.it_value.tv_usec == 0)
                                waittime = INFINITE;    /* Cancel the interrupt */
                        else
+                       {
+                               /* Minimum wait time is 1ms */
+                               if (timerCommArea.value.it_value.tv_sec == 0 &&
+                                       timerCommArea.value.it_value.tv_usec < 1000)
+                                       timerCommArea.value.it_value.tv_usec = 1000;
                                /* WaitForSingleObjectEx() uses milliseconds */
                                waittime = timerCommArea.value.it_value.tv_usec / 1000 + timerCommArea.value.it_value.tv_sec * 1000;
+                       }
                        ResetEvent(timerCommArea.event);
                        LeaveCriticalSection(&timerCommArea.crit_sec);
                }