[openib-general] Re: [PATCH 3/3] iWARP CM

Sean Hefty mshefty at ichips.intel.com
Thu Mar 16 09:12:45 PST 2006


Tom Tucker wrote:
> The iWARP CM prevents this from happening by having a state (DESTROYING)
> that prevents events from being delivered after iw_destroy_cm_id has
> returned. This approach avoids having either the kernel application
> thread or the event thread blocked while waiting for the last reference
> to be released. 

You need to consider destroy being called by a separate thread from the one 
processing events.  An event can be generated, queued, and just about to 
callback the user when the user calls destroy.  Place the event thread at the 
top of the user's callback routine.  There's no way to halt the execution of the 
callback at this point.  Now let the thread calling destroy execute and return 
to the user.  The callback code is still running, but the user is not even aware 
at this point.

> Unlike the IB side, the iWARP side has orderly shutdown semantics that
> can delay the delivery of the CLOSE event for minutes. With this
> implementation, life goes on and the object simply stays around until
> the last reference is removed. 

Even in IB, there's a CM object that hangs around after the user has called 
destroy, and it has returned.  This is fine; the user is unaware of this object.

> Please look at the handling of events in cm_event_handler. If the state
> is DESTROYING, events are not queued for delivery. This handles events
> that are generated by the provider after iw_destroy_cm_id has returned. 

The problem is when the user calls destroy at the same time that an event is 
being generated.  If the event gets there first, a callback will run.  Destroy 
does not wait for that callback to complete before returning.  Hopefully, I've 
explained the situation a little better.

- Sean



More information about the general mailing list