Hi, This proposal lets callout_reset and callout_schedule return true if it reschedules a pending callout and return false otherwise.
The feature is useful when you have a reference to an object that is passed to a callout. In this case you need to take care of a reference leak on callout_reset (and other APIs); it silently reschedules (IOW cancels) a pending callout and leaks a reference. Unfortunately callout_reset doesn't tell us the reschedule. To avoid the leak with the current APIs of callout, we have to do something like this: if (callout_pending(&obj->ch)) { expired = callout_stop(&obj->ch); if (!expired) obj_unref(obj); } obj_ref(obj); callout_reset(&obj->ch); callout_pending is required to exclude the case that the callout has never been scheduled because callout_stop just checks CALLOUT_FIRED. The proposal makes the code simple like this: obj_ref(obj); canceled = callout_reset(&obj->ch); if (canceled) obj_unref(obj); This is a patch (quite simple): http://www.netbsd.org/~ozaki-r/callout_reset.diff Note that this proposal changes API/ABI however we don't need to tweak existing callers of callout_reset/callout_schedule because it doesn't break the original usage. Any comments? Thanks, ozaki-r