Re: [AD] Mini-synchronization API proposal for 4.1.x

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


> Wait.. that'd mean we'd be right back where we started.

Not quite true because callbacks would be disabled, but I agree that the
former solution would still be non symmetrical.

> So the system must automatically lock.

I agree that's the best solution. Moreover, it is actually somehow or other
mandatory if we want to ensure thread safety for timers: the system timer
callback must lock the system mutex in order for remove_timer() (which must
lock it too) to block if it is called in the middle of the callback.

> Anyway, attached is a very trashy prototype for Linux + X11 + timer
> callbacks.  It works with both pthreads and SIGALRM.  What happens is
> that if callbacks are disabled, any new callback 'events' are added to
> the queue, which is completely flushed when callbacks are reenabled. I
> don't know if that's good (what if the flushing takes too long?), but
> it was easy to code :-)

That sounds sensible to me, and the code in src/unix/usync.c could probably
form the basis of a platform-independent src/events.c that would be used by
all platforms.

I think your idea of serializing the events is the way to go, with a single
system lock to control them. But I'm not sure whether using a dedicated
thread is the best solution under Windows, so I'll first try to attach the
event manager to the timer thread. I guess this solution is not feasible
with pthreads because pthreads can't block on CVs with a timeout value (a la
select), is it ?

--
Eric Botcazou
ebotcazou@xxxxxxxxxx



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/