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>