*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.159 2004/01/07 18:56:24 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.160 2004/01/09 21:08:46 momjian Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
*/
if (CommitDelay > 0 && enableFsync &&
CountActiveBackends() >= CommitSiblings)
- {
- struct timeval delay;
-
- delay.tv_sec = 0;
- delay.tv_usec = CommitDelay;
- (void) select(0, NULL, NULL, NULL, &delay);
- }
+ PG_USLEEP(CommitDelay);
XLogFlush(recptr);
}
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.151 2004/01/07 18:56:27 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.152 2004/01/09 21:08:49 momjian Exp $
*
*-------------------------------------------------------------------------
*/
* there was nothing to do at all.
*/
if (n > 0)
- {
- PG_DELAY(BgWriterDelay);
- }
+ PG_USLEEP(BgWriterDelay * 1000);
else
sleep(10);
}
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/lmgr/s_lock.c,v 1.23 2003/12/27 20:58:58 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/lmgr/s_lock.c,v 1.24 2004/01/09 21:08:49 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include <unistd.h>
#include "storage/s_lock.h"
-
+#include "miscadmin.h"
/*
* s_lock_stuck() - complain about a stuck spinlock
int spins = 0;
int delays = 0;
int cur_delay = MIN_DELAY_CSEC;
- struct timeval delay;
while (TAS(lock))
{
if (++delays > NUM_DELAYS)
s_lock_stuck(lock, file, line);
- delay.tv_sec = cur_delay / 100;
- delay.tv_usec = (cur_delay % 100) * 10000;
- (void) select(0, NULL, NULL, NULL, &delay);
+ PG_USLEEP(cur_delay * 10000);
#if defined(S_LOCK_TEST)
fprintf(stdout, "*");
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.142 2004/01/06 23:15:22 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.143 2004/01/09 21:08:50 momjian Exp $
*
* NOTES
* some of the information in this file should be moved to
extern void ProcessInterrupts(void);
#define CHECK_FOR_INTERRUPTS() \
- do { \
- if (InterruptPending) \
- ProcessInterrupts(); \
- } while(0)
+do { \
+ if (InterruptPending) \
+ ProcessInterrupts(); \
+} while(0)
#define HOLD_INTERRUPTS() (InterruptHoldoffCount++)
#define RESUME_INTERRUPTS() \
- do { \
- Assert(InterruptHoldoffCount > 0); \
- InterruptHoldoffCount--; \
- } while(0)
+do { \
+ Assert(InterruptHoldoffCount > 0); \
+ InterruptHoldoffCount--; \
+} while(0)
#define START_CRIT_SECTION() (CritSectionCount++)
#define END_CRIT_SECTION() \
- do { \
- Assert(CritSectionCount > 0); \
- CritSectionCount--; \
- } while(0)
-
-#define PG_DELAY(_msec) \
-{ \
+do { \
+ Assert(CritSectionCount > 0); \
+ CritSectionCount--; \
+} while(0)
+
+#define PG_USLEEP(_usec) \
+do { \
+#ifndef WIN32
+ /* This will overflow on systems with 32-bit ints for > ~2000 secs */ \
struct timeval delay; \
- delay.tv_sec = (_msec) / 1000; \
- delay.tv_usec = ((_msec) % 1000) * 1000; \
+ \
+ delay.tv_sec = (_usec) / 1000000; \
+ delay.tv_usec = ((_usec) % 1000000); \
(void) select(0, NULL, NULL, NULL, &delay); \
-}
+#else
+ Sleep(_usec < 500) ? 1 : (_usec+500)/ 1000);
+#endif
+} while(0)
/*****************************************************************************
* globals.h -- *