如何立即取消queue_delayed_work?

时间:2017-08-08 05:52:08

标签: linux-device-driver

在我的驱动程序中将调用queue_delayed_work并执行操作,

queue_delayed_work(queue, work, 60000);

然后在某些条件后停止此队列:

cancel_delayed_work_sync(work);
flush_delayed_work(work);
flush_workqueue(queue);    

工人职能:

static void worker(struct work_struct *work) {
    printk("this is worker function!\n");
    ...
    queue_delayed_work(queue, work, 60000);
}

但我发现在我停止工作队列(取消和冲洗)后仍然可以触发工作人员功能 它是如何发生的,我应该如何避免呢?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您需要取消提交到共享队列的工作条目,您可以使用cancel_delayed_work。

如果要刷新共享工作队列,则需要单独的函数:

void flush_scheduled_work(void)