Skip to content

fix(timer): use begin() instead of rbegin() in resetArriveTime()#75

Open
songshu8848 wants to merge 1 commit into
Gooddbird:mainfrom
songshu8848:fix-timer-reset-arrive-time
Open

fix(timer): use begin() instead of rbegin() in resetArriveTime()#75
songshu8848 wants to merge 1 commit into
Gooddbird:mainfrom
songshu8848:fix-timer-reset-arrive-time

Conversation

@songshu8848
Copy link
Copy Markdown

Bug描述:
tinyrpc/net/timer.cc 文件中 Timer::resetArriveTime()函数可能存在一个逻辑问题,当前实现使用 tmp.rbegin()(反向迭代器)获取队列中最晚的定时任务来设置 timerfd 的触发时间。这会导致当队列中存在多个不同时间的定时任务时,timerfd 总是被设置为在最晚的任务到期时才触发,而中间应该提前执行的定时任务会被延迟执行。
具体场景:
假设队列中已有任务 A(200ms 到期)和 B(400ms 到期),当前实现会取 B(400ms)设置 timerfd,导致任务 A 实际上延迟到 400ms 才执行,延迟了 200ms。
建议修复:
将第100行的 auto it = tmp.rbegin();修改为 auto it = tmp.begin();使 timerfd 跟踪最早到期的任务。
验证依据:
addTimerEvent()中判断是否需要重置 timerfd 的逻辑使用的是 m_pending_events.begin()(最早事件),两者应保持一致。

@AIGC-yuxincai
Copy link
Copy Markdown

AIGC-yuxincai commented Apr 3, 2026 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants