Tom Lane wrote:
> Bruce Momjian <[EMAIL PROTECTED]> writes:
> !                             /* WaitForSingleObjectEx() uses milliseconds */
> > !                           waittime = timerCommArea.value.it_value.tv_usec 
> > / 1000 + timerCommArea.value.it_value.tv_sec * 1000;
> 
> Seems like this probably ought to round up not down:
> 
>       waittime = (timerCommArea.value.it_value.tv_usec + 999) / 1000 + 
> timerCommArea.value.it_value.tv_sec * 1000;
> 
> Otherwise, an attempt to wait for 100 usec would convert to waittime 0,
> which seems like a bad thing.  In general the semantics of timed waits
> are always supposed to be "you wait at least this long".

I thought about that, but because statement_timeout is in millis, and
not micros, we can't have a value that gets rounded down.   I am
thinking a cleaner solution is to check for secs and if that is 0 and
microsecs < 1000, you set millis = 1.

Patch attached and applied to head and 8.1.X.

-- 
  Bruce Momjian   [EMAIL PROTECTED]
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: src/backend/port/win32/timer.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/port/win32/timer.c,v
retrieving revision 1.10
diff -c -c -r1.10 timer.c
*** src/backend/port/win32/timer.c	9 Aug 2006 17:47:03 -0000	1.10
--- src/backend/port/win32/timer.c	9 Aug 2006 20:39:16 -0000
***************
*** 56,63 ****
--- 56,69 ----
  				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);
  		}
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

               http://archives.postgresql.org

Reply via email to