Re: [BUGS] BUG #2569: statement_timeout bug on Windows

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: [BUGS] BUG #2569: statement_timeout bug on Windows
Дата
Msg-id 200608092041.k79KfQi18848@momjian.us
обсуждение исходный текст
Ответ на Re: [BUGS] BUG #2569: statement_timeout bug on Windows  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: [BUGS] BUG #2569: statement_timeout bug on Windows  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-patches
Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> 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   bruce@momjian.us
  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);
          }

В списке pgsql-patches по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Maintaining cluster order on insert
Следующее
От: "Jonah H. Harris"
Дата:
Сообщение: Re: Maintaining cluster order on insert