Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jul 2002 15:37:50 -0700
From:      Terry Lambert <tlambert2@mindspring.com>
To:        Archie Cobbs <archie@dellroad.org>
Cc:        John Baldwin <jhb@FreeBSD.org>, davidx@viasoft.com.cn, freebsd-arch@FreeBSD.org, julian@elischer.org
Subject:   Re: Timeout and SMP race
Message-ID:  <3D2CB73E.670D80C8@mindspring.com>
References:  <200207102127.g6ALRl329601@arch20m.dellroad.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Archie Cobbs wrote:
> Terry Lambert writes:
> > > FWIW, here is an API I've used before. This handles all race
> > > conditions and the 'other thread' question.
> >
> > I like this timer API.
> >
> > You need to add a timer_modify_interval (or something similar), so
> > that intervals can be changed without having to destroy and recreate
> > the timer, though, to avoid another potential race condition.
> 
> There's no race condition there. You can just do this to 'reset' a timer:
> 
>         timer_cancel(&foo->timer);
>         timer_start(&foo->timer, ...);
> 
> Your timer_modify_interval() would just be an optimization of this.
> 
> I forgot to mention that timer_cancel() does nothing if *handlep == NULL.


This depends on whether you mutex is local to the timer only, or
if it has other uses.

There is also an order of operation race, if you can be preempted
between the cancel and the start.

8-).

-- Terry

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3D2CB73E.670D80C8>