我对此表示怀疑。
这是代码(timer.h#L169)timer_pending
:
static inline int timer_pending(const struct timer_list * timer) {
return timer->entry.next != NULL;
}
这是在您调用时最终初始化计时器的代码(timer.c#L621init_timer
) :
static void do_init_timer(struct timer_list *timer, unsigned int flags,
const char *name, struct lock_class_key *key)
{
struct tvec_base *base = __raw_get_cpu_var(tvec_bases);
timer->entry.next = NULL;
timer->base = (void *)((unsigned long)base | flags);
timer->slack = -1;
#ifdef CONFIG_TIMER_STATS
timer->start_site = NULL;
timer->start_pid = -1;
memset(timer->start_comm, 0, TASK_COMM_LEN);
#endif
lockdep_init_map(&timer->lockdep_map, name, key, 0);
}
请注意,timer_pending
在entry.next
您调用init_timer
. 所以timer_pending
当定时器没有被初始化时可能会返回true。
不过,我不知道调用del_timer_sync
尚未初始化的计时器会产生什么影响。