Re: corruption causing crash in __queue_work
From: Tejun Heo
Date: Thu Dec 17 2015 - 10:50:37 EST
Hello, Nikolay.
On Thu, Dec 17, 2015 at 05:43:12PM +0200, Nikolay Borisov wrote:
> Right, but my initial understanding was that when canceling the delayed
> work and then issuing flush_workqueue would act the same way as if
> cancel_delayed_work_sync is called wrt to this particular delayed item, no?
Not necessarily. cancel_delayed_work() cancels whatever is currently
pending. flush_workqueue() flushes whatever is pending and in flight
at the time of invocation. Imagine the following scenario.
1. Work item is running but hasn't requeued itself yet.
2. cancel_delayed_work_sync() doesn't do anything as it's not pending.
3. flush_workqueue() starts and waits for the running instance.
4. The running instance requeues itself but this isn't included in the
scope of the above flush_workqueue().
5. flush_workqueue() returns when the work item is finished (but it's
still queued).
Thanks.
--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/