[Gluster-devel] Is there a safe way to cancel a timer ?

Krishnan Parthasarathi kparthas at redhat.com
Fri Nov 21 03:56:40 UTC 2014


You should upload the patch, it would make reviewing easier.



----- Original Message -----
> Would it be ok if I upload a patch with my proposal for review ?
> 
> Xavi
> 
> On 11/12/2014 11:30 AM, Xavier Hernandez wrote:
> > Hi Shyam,
> >
> > I've been discussing this stuff with Krishnan and we ended up with a
> > proposal (see attached file).
> >
> > There many comments to explain how it works.
> >
> > What do you think about this proposal ?
> >
> > Xavi
> >
> > On 11/11/2014 07:42 PM, Shyam wrote:
> >> On 11/10/2014 09:59 AM, Xavier Hernandez wrote:
> >>> Hi Shyam,
> >>>
> >>> On 11/10/2014 03:36 PM, Shyam wrote:
> >>>> Hi Xavi,
> >>>>
> >>>> I think you are referring to the problem as I see it, and have posted
> >>>> here, http://review.gluster.org/#/c/6459/1/libglusterfs/src/timer.c
> >>>>
> >>>> If so, there is nothing clean to handle the case in the code. Something
> >>>> akin to returning a non-zero from the cancel and handling it by the
> >>>> consumers is a possibility.
> >>>
> >>> Yes, something similar to this is what I was thinking. The solution in
> >>> the patch is not enough to handle this case.
> >>>
> >>> But there are other cases where some more control will be needed:
> >>>
> >>> * Suppose a fini() function releasing resources may need to cancel a
> >>> pending timer. To avoid crashes, the ideal solution would be to be sure
> >>> that we don't release anything the callback might need before the
> >>> callback has completely been executed or correctly canceled. This means
> >>> that we would need some kind of synchronization support for timers.
> >>
> >> Yes, this is needed. I need to give this more thought though, my memory
> >> on this problem is a bit scratchy at present.
> >>
> >>>
> >>> * Suppose that you write a callback to release some resource after a
> >>> certain amount of time and this callback is handled to a subsystem that
> >>> does not know exactly what the callback does. If an external condition
> >>> happens, and it's needed to execute the callback before the timeout
> >>> expires, you need a way to let the callback be executed, with an
> >>> indication that it haven0t been executed by a normal timeout.
> >>
> >> I presume this is an _simpler_ extension if we solve the one above.
> >>
> >>>
> >>> These are only 2 possible cases where having a better timer api would be
> >>> helpful. In fact the first case would be interesting for ec, that
> >>> currently needs something like that. It also needs a way to detect if a
> >>> callback has really been canceled or not to avoid inconsistencies.
> >>>
> >>> Would be acceptable to improve the current timer api ?
> >>
> >> Yes it would :)
> >>
> >> I would like to have the concurrent cancel and event having been (going
> >> to) fired handled first, if possible with little the no changes in the
> >> API, and the second case later. Your priorities seem to suggest the same.
> >>
> >> Shyam
> >
> >
> > _______________________________________________
> > Gluster-devel mailing list
> > Gluster-devel at gluster.org
> > http://supercolony.gluster.org/mailman/listinfo/gluster-devel
> >
> 


More information about the Gluster-devel mailing list