Matthew Dillon wrote:
>     I looked at the code more closely.  The callout code is all
>     cpu-localized but it isn't 100% SMP safe.  It has SMP code to
>     handle cross-cpu removal but the CALLOUT_PENDING check is just
>     not safe.
> 
>     It is a very small window never likely to occur during a detach, but
>     I think I need to move up the globaldata pointer test.  What do you
>     think about this?

When would this happen?  Do you think of this:

1. callout starts running, clears CALLOUT_PENDING
                2. other cpu runs callout_stop(), tests for CALLOUT_PENDING
                3. callout_stop() is happy, returns
4. callout runs callout_reset, enables callouts again

so my question here is:  why don't we check for CALLOUT_ACTIVE in the first 
place?  If the callout is not ACTIVE, there is no way that it can fire.

Your change looks good, but what's this CALLOUT_ACTIVE business anyways?  I'd 
use it to signal "callout running right now".  Or is it just something like 
!callout_stopped()?

cheers
  simon

Reply via email to