set condattr for criticalEntryCV instead of PTHREAD_MUTEX_INITIALIZER
This commit is contained in:
@ -299,7 +299,7 @@ void WalWriterMain(void)
|
||||
(void)pthread_mutex_lock(&g_instance.wal_cxt.criticalEntryMutex);
|
||||
g_instance.wal_cxt.isWalWriterSleeping = true;
|
||||
while (pCriticalEntry->status == WAL_NOT_COPIED && !t_thrd.walwriter_cxt.shutdown_requested) {
|
||||
(void)clock_gettime(CLOCK_REALTIME, &time_to_wait);
|
||||
(void)clock_gettime(CLOCK_MONOTONIC, &time_to_wait);
|
||||
time_to_wait.tv_nsec += g_sleep_timeout_ms * NANOSECONDS_PER_MILLISECOND;
|
||||
if (time_to_wait.tv_nsec >= NANOSECONDS_PER_SECOND) {
|
||||
time_to_wait.tv_nsec -= NANOSECONDS_PER_SECOND;
|
||||
|
||||
@ -102,6 +102,20 @@ static void knl_g_ckpt_init(knl_g_ckpt_context* ckpt_cxt)
|
||||
|
||||
static void knl_g_wal_init(knl_g_wal_context *const wal_cxt)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = pthread_condattr_init(&wal_cxt->criticalEntryAtt);
|
||||
if (ret != 0) {
|
||||
elog(FATAL, "Fail to init conattr for walwrite");
|
||||
}
|
||||
ret = pthread_condattr_setclock(&wal_cxt->criticalEntryAtt, CLOCK_MONOTONIC);
|
||||
if (ret != 0) {
|
||||
elog(FATAL, "Fail to setclock walwrite");
|
||||
}
|
||||
ret = pthread_cond_init(&wal_cxt->criticalEntryCV, &wal_cxt->criticalEntryAtt);
|
||||
if (ret != 0) {
|
||||
elog(FATAL, "Fail to init cond for walwrite");
|
||||
}
|
||||
|
||||
wal_cxt->walInsertStatusTable = NULL;
|
||||
wal_cxt->walFlushWaitLock = NULL;
|
||||
wal_cxt->walBufferInitWaitLock = NULL;
|
||||
@ -114,7 +128,6 @@ static void knl_g_wal_init(knl_g_wal_context *const wal_cxt)
|
||||
wal_cxt->XLogFlusherCPU = 0;
|
||||
wal_cxt->isWalWriterSleeping = false;
|
||||
wal_cxt->criticalEntryMutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
wal_cxt->criticalEntryCV = (pthread_cond_t)PTHREAD_COND_INITIALIZER;
|
||||
wal_cxt->globalEndPosSegNo = InvalidXLogSegPtr;
|
||||
wal_cxt->walWaitFlushCount = 0;
|
||||
wal_cxt->lastWalStatusEntryFlushed = -1;
|
||||
|
||||
@ -698,6 +698,7 @@ typedef struct knl_g_wal_context {
|
||||
volatile bool isWalWriterSleeping;
|
||||
pthread_mutex_t criticalEntryMutex;
|
||||
pthread_cond_t criticalEntryCV;
|
||||
pthread_condattr_t criticalEntryAtt;
|
||||
volatile uint32 walWaitFlushCount; /* only for xlog statistics use */
|
||||
volatile XLogSegNo globalEndPosSegNo; /* Global variable for init xlog segment files. */
|
||||
int lastWalStatusEntryFlushed;
|
||||
|
||||
Reference in New Issue
Block a user