change sleep to pthread_cond_timedwait for heatbeat thread of gs_probackup
This commit is contained in:
@ -66,6 +66,8 @@ pthread_t hearbeatTimerId;
|
|||||||
volatile uint32 timerFlag = 0;
|
volatile uint32 timerFlag = 0;
|
||||||
volatile uint32 heartbeatRunning = 0;
|
volatile uint32 heartbeatRunning = 0;
|
||||||
pthread_mutex_t heartbeatMutex;
|
pthread_mutex_t heartbeatMutex;
|
||||||
|
pthread_mutex_t heartbeatQuitMutex;
|
||||||
|
pthread_cond_t heartbeatQuitCV;
|
||||||
|
|
||||||
typedef enum { DO_WAL_DATA_WRITE_DONE, DO_WAL_DATA_WRITE_STOP, DO_WAL_DATA_WRITE_ERROR } DoWalDataWriteResult;
|
typedef enum { DO_WAL_DATA_WRITE_DONE, DO_WAL_DATA_WRITE_STOP, DO_WAL_DATA_WRITE_ERROR } DoWalDataWriteResult;
|
||||||
static TimestampTz localGetCurrentTimestamp(void);
|
static TimestampTz localGetCurrentTimestamp(void);
|
||||||
@ -211,6 +213,18 @@ static int open_walfile(XLogRecPtr startpoint, uint32 timeline, const char* base
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void heartbeatSleep(void)
|
||||||
|
{
|
||||||
|
struct timespec time_to_wait;
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&heartbeatQuitMutex);
|
||||||
|
clock_gettime(CLOCK_REALTIME, &time_to_wait);
|
||||||
|
time_to_wait.tv_sec += HEART_BEAT;
|
||||||
|
res = pthread_cond_timedwait(&heartbeatQuitCV, &heartbeatQuitMutex, &time_to_wait);
|
||||||
|
pthread_mutex_unlock(&heartbeatQuitMutex);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is timer handler.
|
* This is timer handler.
|
||||||
* Sending keepalive packet during the walreceiver running.
|
* Sending keepalive packet during the walreceiver running.
|
||||||
@ -227,7 +241,7 @@ void* heartbeatTimerHandler(void* data)
|
|||||||
(void)checkForReceiveTimeout(xlogconn);
|
(void)checkForReceiveTimeout(xlogconn);
|
||||||
ping_sent = false;
|
ping_sent = false;
|
||||||
pthread_mutex_unlock(&heartbeatMutex);
|
pthread_mutex_unlock(&heartbeatMutex);
|
||||||
sleep(HEART_BEAT);
|
heartbeatSleep();
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -268,6 +282,9 @@ void closeHearBeatTimer(void)
|
|||||||
{
|
{
|
||||||
heartbeatRunning = 0;
|
heartbeatRunning = 0;
|
||||||
pthread_mutex_unlock(&heartbeatMutex);
|
pthread_mutex_unlock(&heartbeatMutex);
|
||||||
|
pthread_mutex_lock(&heartbeatQuitMutex);
|
||||||
|
pthread_cond_signal(&heartbeatQuitCV);
|
||||||
|
pthread_mutex_unlock(&heartbeatQuitMutex);
|
||||||
(void)pthread_join(hearbeatTimerId, NULL);
|
(void)pthread_join(hearbeatTimerId, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user