[Openais] [PATCH]: openais/trunk: Only send response/callback when unlocking pending locks

Ryan O'Hara rohara at redhat.com
Wed Jun 10 09:47:55 PDT 2009


On Wed, Jun 10, 2009 at 05:08:31PM +0200, Jan Friesse wrote:
> Yes it really works in that test case.

Hmm. I think your patch might cause multiple lock grant
callbacks. Either way, Steve and I talked this morning about a
solution. After re-reading the spec, I think the best thing to do is
to add as check to saLckDispatch to verify the lock_id is valid before
we issue the callback. I have a patch that I am testing.


> Ryan O'Hara wrote:
> > On Wed, Jun 10, 2009 at 04:20:51PM +0200, Jan Friesse wrote:
> >> Ryan,
> >> this patch breaks SAF Test SaLckLockGrantCallbackT/10.c, and there is
> >> no close before unlock. I made a patch, but I'm really not sure about
> >> correctness.
> > 
> > Does that patch work? Does it fix that particular test case? It is an
> > interesting idea -- but I am not sure the code can/will ever to this
> > far with a lock that does not exist. I need to think about this a bit
> > more.
> > 
> > 
> > 
> >> Regards,
> >>   Honza
> >>
> >> Ryan O'Hara wrote:
> >>> When unlocking a pending lock request, we must send a response (or
> >>> callback) to the library indicating an error occured. This patch
> >>> simply adds a check that the lock is pending before we send the
> >>> response.
> >>>
> >>> Without this fix, callbacks are sent when they are not needed. For
> >>> example, if we close a resource while holding locks we will hit this
> >>> code (in lck_unlock) that will incorrectly send callbacks to the
> >>> library.
> >>>
> >>> Ryan
> >>>
> >>>
> >>>
> >>> ------------------------------------------------------------------------
> >>>
> >>> _______________________________________________
> >>> Openais mailing list
> >>> Openais at lists.linux-foundation.org
> >>> https://lists.linux-foundation.org/mailman/listinfo/openais
> > 
> >> diff --git a/trunk/services/lck.c b/trunk/services/lck.c
> >> index 0e65ba1..6f85111 100644
> >> --- a/trunk/services/lck.c
> >> +++ b/trunk/services/lck.c
> >> @@ -1819,9 +1819,8 @@ static void lck_unlock (
> >>  				api->timer_delete (resource_lock->timer_handle);
> >>  				lck_resourcelock_response_send (resource_lock, SA_AIS_ERR_TIMEOUT);
> >>  			}
> >> -			else {
> >> -				lck_lockgrant_callback_send (resource_lock, SA_AIS_ERR_NOT_EXIST);
> >> -			}
> >> +		} else {
> >> +			lck_lockgrant_callback_send (resource_lock, SA_AIS_ERR_NOT_EXIST);
> >>  		}
> >>  	}
> >>  
> > 


More information about the Openais mailing list