]> granicus.if.org Git - postgresql/commitdiff
Add a comment warning against use of pg_usleep() for long sleeps.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Jun 2013 18:43:10 +0000 (14:43 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Jun 2013 18:43:10 +0000 (14:43 -0400)
Follow-up to commit 873ab97219caabeb2f7b390268a4fe01e2b7518c, in which
I noted that WaitLatch was a better solution in the commit log message,
but neglected to add any documentation in the code.

src/port/pgsleep.c

index 1e2c74dbab8d8ad8034638c4be8e6673ea499b21..3e6b66562574470ff851c125a9f4f88171bc4fca 100644 (file)
  * the requested delay to be rounded up to the next resolution boundary.
  *
  * On machines where "long" is 32 bits, the maximum delay is ~2000 seconds.
+ *
+ * CAUTION: the behavior when a signal arrives during the sleep is platform
+ * dependent.  On most Unix-ish platforms, a signal does not terminate the
+ * sleep; but on some, it will (the Windows implementation also allows signals
+ * to terminate pg_usleep).  And there are platforms where not only does a
+ * signal not terminate the sleep, but it actually resets the timeout counter
+ * so that the sleep effectively starts over!  It is therefore rather hazardous
+ * to use this for long sleeps; a continuing stream of signal events could
+ * prevent the sleep from ever terminating.  Better practice for long sleeps
+ * is to use WaitLatch() with a timeout.
  */
 void
 pg_usleep(long microsec)