fix: avoid timeout event lost
This commit is contained in:
parent
b2924fd9c7
commit
3d15b65cea
|
@ -23,22 +23,22 @@ extern "C" {
|
|||
// If the error is in a third-party library, place this header file under the third-party library header file.
|
||||
// When you want to use this feature, you should find or add the same function in the following section.
|
||||
#ifndef ALLOW_FORBID_FUNC
|
||||
#define strptime STRPTIME_FUNC_TAOS_FORBID
|
||||
#define gettimeofday GETTIMEOFDAY_FUNC_TAOS_FORBID
|
||||
#define localtime LOCALTIME_FUNC_TAOS_FORBID
|
||||
#define localtime_s LOCALTIMES_FUNC_TAOS_FORBID
|
||||
#define localtime_r LOCALTIMER_FUNC_TAOS_FORBID
|
||||
#define time TIME_FUNC_TAOS_FORBID
|
||||
#define mktime MKTIME_FUNC_TAOS_FORBID
|
||||
#define strptime STRPTIME_FUNC_TAOS_FORBID
|
||||
#define gettimeofday GETTIMEOFDAY_FUNC_TAOS_FORBID
|
||||
#define localtime LOCALTIME_FUNC_TAOS_FORBID
|
||||
#define localtime_s LOCALTIMES_FUNC_TAOS_FORBID
|
||||
#define localtime_r LOCALTIMER_FUNC_TAOS_FORBID
|
||||
#define time TIME_FUNC_TAOS_FORBID
|
||||
#define mktime MKTIME_FUNC_TAOS_FORBID
|
||||
#endif
|
||||
|
||||
#ifdef WINDOWS
|
||||
|
||||
#define CLOCK_REALTIME 0
|
||||
#define CLOCK_REALTIME 0
|
||||
|
||||
#define MILLISECOND_PER_SECOND (1000i64)
|
||||
#define MILLISECOND_PER_SECOND (1000i64)
|
||||
#else
|
||||
#define MILLISECOND_PER_SECOND ((int64_t)1000L)
|
||||
#define MILLISECOND_PER_SECOND ((int64_t)1000L)
|
||||
#endif
|
||||
|
||||
#define MILLISECOND_PER_MINUTE (MILLISECOND_PER_SECOND * 60)
|
||||
|
@ -82,13 +82,13 @@ static FORCE_INLINE int64_t taosGetTimestampNs() {
|
|||
return (int64_t)systemTime.tv_sec * 1000000000L + (int64_t)systemTime.tv_nsec;
|
||||
}
|
||||
|
||||
char *taosStrpTime(const char *buf, const char *fmt, struct tm *tm);
|
||||
char * taosStrpTime(const char *buf, const char *fmt, struct tm *tm);
|
||||
struct tm *taosLocalTime(const time_t *timep, struct tm *result);
|
||||
time_t taosTime(time_t *t);
|
||||
time_t taosMktime(struct tm *timep);
|
||||
time_t taosTime(time_t *t);
|
||||
time_t taosMktime(struct tm *timep);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*_TD_OS_TIME_H_*/
|
||||
#endif /*_TD_OS_TIME_H_*/
|
||||
|
|
|
@ -376,17 +376,19 @@ static void transDQTimeout(uv_timer_t* timer) {
|
|||
SDelayQueue* queue = timer->data;
|
||||
tTrace("timer %p timeout", timer);
|
||||
uint64_t timeout = 0;
|
||||
int64_t current = taosGetTimestampMs();
|
||||
do {
|
||||
HeapNode* minNode = heapMin(queue->heap);
|
||||
if (minNode == NULL) break;
|
||||
SDelayTask* task = container_of(minNode, SDelayTask, node);
|
||||
if (task->execTime <= taosGetTimestampMs()) {
|
||||
|
||||
if (task->execTime <= current) {
|
||||
heapRemove(queue->heap, minNode);
|
||||
task->func(task->arg);
|
||||
taosMemoryFree(task);
|
||||
timeout = 0;
|
||||
} else {
|
||||
timeout = task->execTime - taosGetTimestampMs();
|
||||
timeout = task->execTime - current;
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
|
|
Loading…
Reference in New Issue