We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent d737c5d commit c2db0d4Copy full SHA for c2db0d4
multimaster.c
@@ -460,15 +460,18 @@ timestamp_t MtmGetCurrentTime(void)
460
461
void MtmSleep(timestamp_t interval)
462
{
463
- struct timespec ts;
464
- struct timespec rem;
465
- ts.tv_sec = interval/USECS_PER_SEC;
466
- ts.tv_nsec = interval%USECS_PER_SEC*1000;
+ timestamp_t waketm = MtmGetCurrentTime() + interval;
+ for (;;)
+ {
+ timestamp_t sleepfor = waketm - MtmGetCurrentTime();
467
468
- while (nanosleep(&ts, &rem) < 0) {
469
- Assert(errno == EINTR);
470
- CHECK_FOR_INTERRUPTS();
471
- ts = rem;
+ pg_usleep(sleepfor);
+ if (MtmGetCurrentTime() < waketm)
+ Assert(errno == EINTR);
472
+ continue;
473
+ }
474
+ break;
475
}
476
477
0 commit comments