> It depends on whether clients expect to have thread-safe timers or not.
> That is, do you allow multiple threads to act on a timer simultaneously?
> I'm inclined to say not, but Tzachi previously mentioned that there were
> multiple threads in OpenSM that were starting the timer.  If the only
> reason that happened is due to multiple callbacks, then we can probably get
> away without serialization, in which case my code changes also become quite
> a bit simpler.

See start below.  It doesn't matter if multiple threads call it or not.

> > timer_callback(...)
> > {
> >     EnterCriticalSection(p_timer->lock);
> >     p_timer->pfn_callback(..);
> >     LeaveCriticalSection(p_timer->lock);
> 
> Didn't we try holding a lock over the callback and ended up with things not
> working?  This goes back to using the threadpool but not knowing exactly
> how it spins up threads etc.

This has to work, otherwise, the user can't even acquire a lock in their 
callback, which they do.  If serializing the callback doesn't work, the client 
must be expecting multiple callbacks for a single timer.  In that case, we just 
remove the locking above and we're done.

> > cl_timer_start(..)
> > {
> >     HANDLE timer;
> >     /* optional:
> >     DeleteTimerQueueTimerEx(p_timer->timer_queue, NULL); */
> >     return CreateTimerQueueTimer(&timer, p_timer->timer_queue,
> > timer_callback, ...);
> > }
> >
> > cl_timer_stop(..)
> > {
> >     DeleteTimerQueueTimerEx(p_timer->timer_queue,
> > INVALID_HANDLE_VALUE);
> > }
> >
> > cl_timer_trim(..)
> > {
> >     cl_timer_start(..)
> > }
> >
> > This seems MUCH simpler and serializes callbacks.  Do we really need
> > all the extra timer state checking goop just to avoid a few additional
> > callbacks?  I have a hard time believing that adding more complex
> > locking than what's already there won't introduce other, more difficult
> > to find race conditions.
> 
> Depends on whether there ends up being issues with multiple thread pool
> threads blocked on that critsec.  I thought there was an issue reported
> with this...

Someone needs to identify the deadlock, if it exists, because the deadlock is 
likely there in any case.  We're trying to get waaaaaaaay to fancy with this.
_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to