fix: avoid timeout event lost
This commit is contained in:
parent
b2924fd9c7
commit
3d15b65cea
|
@ -376,17 +376,19 @@ static void transDQTimeout(uv_timer_t* timer) {
|
||||||
SDelayQueue* queue = timer->data;
|
SDelayQueue* queue = timer->data;
|
||||||
tTrace("timer %p timeout", timer);
|
tTrace("timer %p timeout", timer);
|
||||||
uint64_t timeout = 0;
|
uint64_t timeout = 0;
|
||||||
|
int64_t current = taosGetTimestampMs();
|
||||||
do {
|
do {
|
||||||
HeapNode* minNode = heapMin(queue->heap);
|
HeapNode* minNode = heapMin(queue->heap);
|
||||||
if (minNode == NULL) break;
|
if (minNode == NULL) break;
|
||||||
SDelayTask* task = container_of(minNode, SDelayTask, node);
|
SDelayTask* task = container_of(minNode, SDelayTask, node);
|
||||||
if (task->execTime <= taosGetTimestampMs()) {
|
|
||||||
|
if (task->execTime <= current) {
|
||||||
heapRemove(queue->heap, minNode);
|
heapRemove(queue->heap, minNode);
|
||||||
task->func(task->arg);
|
task->func(task->arg);
|
||||||
taosMemoryFree(task);
|
taosMemoryFree(task);
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
} else {
|
} else {
|
||||||
timeout = task->execTime - taosGetTimestampMs();
|
timeout = task->execTime - current;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
Loading…
Reference in New Issue