On Thu, Oct 14, 2010 at 10:15:30AM +0100, Stefan Hajnoczi wrote: > I forgot to add that the semantics of cancellation make it difficult > to write correct user code. Every cancellation user needs to add > extra synchronization after the cancel call to handle the case where > the work is currently executing. > > This seems tricky to me and I suspect code using this interface will > be buggy. How about the following? > 1. Add a return value indicating that the work is currently executing > (this still requires the caller to add extra synchronization but is at > least explicit) versus work is no longer on the list. > 2. Add a flag to block until the work has been cancelled or completed. > This is useful to callers who are allowed to block. > In Linux kernel you usually have two function cancel() and cancel_sync(). Second variant waits for work completion.
-- Gleb.