Index: src/backend/access/transam/xact.c =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/access/transam/xact.c,v retrieving revision 1.159 diff -c -c -r1.159 xact.c *** src/backend/access/transam/xact.c 7 Jan 2004 18:56:24 -0000 1.159 --- src/backend/access/transam/xact.c 9 Jan 2004 20:59:04 -0000 *************** *** 561,573 **** */ if (CommitDelay > 0 && enableFsync && CountActiveBackends() >= CommitSiblings) ! { ! struct timeval delay; ! ! delay.tv_sec = 0; ! delay.tv_usec = CommitDelay; ! (void) select(0, NULL, NULL, NULL, &delay); ! } XLogFlush(recptr); } --- 561,567 ---- */ if (CommitDelay > 0 && enableFsync && CountActiveBackends() >= CommitSiblings) ! PG_USLEEP(CommitDelay); XLogFlush(recptr); } Index: src/backend/storage/buffer/bufmgr.c =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/storage/buffer/bufmgr.c,v retrieving revision 1.151 diff -c -c -r1.151 bufmgr.c *** src/backend/storage/buffer/bufmgr.c 7 Jan 2004 18:56:27 -0000 1.151 --- src/backend/storage/buffer/bufmgr.c 9 Jan 2004 20:59:05 -0000 *************** *** 1031,1039 **** * there was nothing to do at all. */ if (n > 0) ! { ! PG_DELAY(BgWriterDelay); ! } else sleep(10); } --- 1031,1037 ---- * there was nothing to do at all. */ if (n > 0) ! PG_USLEEP(BgWriterDelay * 1000); else sleep(10); } Index: src/backend/storage/lmgr/s_lock.c =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/storage/lmgr/s_lock.c,v retrieving revision 1.23 diff -c -c -r1.23 s_lock.c *** src/backend/storage/lmgr/s_lock.c 27 Dec 2003 20:58:58 -0000 1.23 --- src/backend/storage/lmgr/s_lock.c 9 Jan 2004 20:59:06 -0000 *************** *** 19,25 **** #include #include "storage/s_lock.h" ! /* * s_lock_stuck() - complain about a stuck spinlock --- 19,25 ---- #include #include "storage/s_lock.h" ! #include "miscadmin.h" /* * s_lock_stuck() - complain about a stuck spinlock *************** *** 84,90 **** int spins = 0; int delays = 0; int cur_delay = MIN_DELAY_CSEC; - struct timeval delay; while (TAS(lock)) { --- 84,89 ---- *************** *** 97,105 **** 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); #if defined(S_LOCK_TEST) fprintf(stdout, "*"); --- 96,102 ---- if (++delays > NUM_DELAYS) s_lock_stuck(lock, file, line); ! PG_USLEEP(cur_delay * 10000); #if defined(S_LOCK_TEST) fprintf(stdout, "*"); Index: src/include/miscadmin.h =================================================================== RCS file: /cvsroot/pgsql-server/src/include/miscadmin.h,v retrieving revision 1.142 diff -c -c -r1.142 miscadmin.h *** src/include/miscadmin.h 6 Jan 2004 23:15:22 -0000 1.142 --- src/include/miscadmin.h 9 Jan 2004 20:59:06 -0000 *************** *** 75,108 **** extern void ProcessInterrupts(void); #define CHECK_FOR_INTERRUPTS() \ ! do { \ ! if (InterruptPending) \ ! ProcessInterrupts(); \ ! } while(0) #define HOLD_INTERRUPTS() (InterruptHoldoffCount++) #define RESUME_INTERRUPTS() \ ! 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) \ ! { \ struct timeval delay; \ ! delay.tv_sec = (_msec) / 1000; \ ! delay.tv_usec = ((_msec) % 1000) * 1000; \ (void) select(0, NULL, NULL, NULL, &delay); \ ! } /***************************************************************************** * globals.h -- * --- 75,114 ---- extern void ProcessInterrupts(void); #define CHECK_FOR_INTERRUPTS() \ ! do { \ ! if (InterruptPending) \ ! ProcessInterrupts(); \ ! } while(0) #define HOLD_INTERRUPTS() (InterruptHoldoffCount++) #define RESUME_INTERRUPTS() \ ! 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_USLEEP(_usec) \ ! do { \ ! #ifndef WIN32 ! /* This will overflow on systems with 32-bit ints for > ~2000 secs */ \ struct timeval delay; \ ! \ ! 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 -- *