[Openais] [lck 5/7] Test validity of handle in *resourceLock(Async)

Jan Friesse jfriesse at redhat.com
Wed Jun 3 02:54:34 PDT 2009


Ryan O'Hara wrote:
> On Tue, Jun 02, 2009 at 05:58:46PM +0200, Jan Friesse wrote:
>> Main problem is,
>> that sometimes message_handler_req_lib_lck_resourcelock(async) ask to
>> deleted handle. So this patch test result of hdb_get... and if it is not
>> 0, it should return error to caller -> ipc send. So from my point of
>> view, it's just easier to introduce more universal function (and call it
>> in old function) to send IPC reply.
> 
> OK. But I think we can work out this error condition without
> introducing a new routine to send a response. We have a function that
> does that. Let me work through a few other bugs and I'll dig into this
> issue afterwards.

Ok. New function is in fact not new (it's only more general version of
old, and old function just calls that new).

For me, remove this bug is show stopper before running more saf test, so
please, let me know, after you will finish all issues you know, and I
can continue with saf tests.

Regards,
  Honza

> 
> 
>> Ryan O'Hara wrote:
>>> NACK. What is the purpose of introducing a new function?
>>>
>>> On Tue, Jun 02, 2009 at 05:34:07PM +0200, Jan Friesse wrote:
>>>> This patch also split lck_resourcelock_response_send to two
>>>> functions, because it looks like easy way how to avoid
>>>> code duplication.
>>>> ---
>>>>  trunk/services/lck.c |   56 ++++++++++++++++++++++++++++++++++---------------
>>>>  1 files changed, 39 insertions(+), 17 deletions(-)
>>>>
>>>> diff --git a/trunk/services/lck.c b/trunk/services/lck.c
>>>> index 383e862..055c8ad 100644
>>>> --- a/trunk/services/lck.c
>>>> +++ b/trunk/services/lck.c
>>>> @@ -1572,32 +1572,43 @@ static struct resource_lock *lck_resource_lock_find (
>>>>  	return (0);
>>>>  }
>>>>  
>>>> +static void lck_resourcelock_response_send_int(
>>>> +	void *conn,
>>>> +	mar_uint32_t lock_status,
>>>> +	SaAisErrorT error)
>>>> +{
>>>> +	struct res_lib_lck_resourcelock res_lib_lck_resourcelock;
>>>> +
>>>> +	res_lib_lck_resourcelock.header.size =
>>>> +		sizeof (struct res_lib_lck_resourcelock);
>>>> +	res_lib_lck_resourcelock.header.id =
>>>> +		MESSAGE_RES_LCK_RESOURCELOCK;
>>>> +	res_lib_lck_resourcelock.header.error = error;
>>>> +	res_lib_lck_resourcelock.lock_status =
>>>> +		lock_status;
>>>> +
>>>> +	api->ipc_response_send (
>>>> +		conn,
>>>> +		&res_lib_lck_resourcelock,
>>>> +		sizeof (struct res_lib_lck_resourcelock));
>>>> +}
>>>> +
>>>>  static void lck_resourcelock_response_send (
>>>>  	struct resource_lock *resource_lock,
>>>>  	SaAisErrorT error)
>>>>  {
>>>> -	struct res_lib_lck_resourcelock res_lib_lck_resourcelock;
>>>>  
>>>>  	/* DEBUG */
>>>>  	log_printf (LOGSYS_LEVEL_DEBUG, "[DEBUG]: lck_resourcelock_response_send\n");
>>>>  
>>>> +	assert (resource_lock != NULL);
>>>> +
>>>>  	if (api->ipc_source_is_local (&resource_lock->response_source))
>>>>  	{
>>>> -		res_lib_lck_resourcelock.header.size =
>>>> -			sizeof (struct res_lib_lck_resourcelock);
>>>> -		res_lib_lck_resourcelock.header.id =
>>>> -			MESSAGE_RES_LCK_RESOURCELOCK;
>>>> -		res_lib_lck_resourcelock.header.error = error;
>>>> -
>>>> -		if (resource_lock != NULL) {
>>>> -			res_lib_lck_resourcelock.lock_status =
>>>> -				resource_lock->lock_status;
>>>> -		}
>>>> -
>>>> -		api->ipc_response_send (
>>>> +		lck_resourcelock_response_send_int(
>>>>  			resource_lock->response_source.conn,
>>>> -			&res_lib_lck_resourcelock,
>>>> -			sizeof (struct res_lib_lck_resourcelock));
>>>> +			resource_lock->lock_status,
>>>> +			error);
>>>>  	}
>>>>  }
>>>>  
>>>> @@ -2045,6 +2056,7 @@ error_exit:
>>>>  				sizeof (*resource_instance), &resource_id);
>>>>  			hdb_handle_get (&resource_hdb,
>>>>  				resource_id, (void *)&resource_instance);
>>>> +			fprintf(stderr,"Resource id = %lld\n",resource_id);
>>>>  			memcpy (&resource_instance->source,
>>>>  				&req_exec_lck_resourceopen->source,
>>>>  				sizeof (mar_message_source_t));
>>>> @@ -2997,6 +3009,7 @@ static void message_handler_req_lib_lck_resourcelock (
>>>>  	struct req_exec_lck_resourcelock req_exec_lck_resourcelock;
>>>>  	struct resource_instance *resource_instance;
>>>>  	struct iovec iovec;
>>>> +	int res;
>>>>  
>>>>  	/* DEBUG */
>>>>  	log_printf (LOGSYS_LEVEL_DEBUG, "LIB request: saLckResourceLock\n");
>>>> @@ -3027,8 +3040,12 @@ static void message_handler_req_lib_lck_resourcelock (
>>>>  	req_exec_lck_resourcelock.timeout =
>>>>  		req_lib_lck_resourcelock->timeout;
>>>>  
>>>> -	hdb_handle_get (&resource_hdb, req_lib_lck_resourcelock->resource_id,
>>>> +	res = hdb_handle_get (&resource_hdb, req_lib_lck_resourcelock->resource_id,
>>>>  		(void *)&resource_instance);
>>>> +	if (res != 0) {
>>>> +		lck_resourcelock_response_send_int(conn, 0, SA_AIS_ERR_BAD_HANDLE);
>>>> +		return ;
>>>> +	}
>>>>  
>>>>  	memcpy (&req_exec_lck_resourcelock.callback_source,
>>>>  		&resource_instance->source, sizeof (mar_message_source_t));
>>>> @@ -3049,6 +3066,7 @@ static void message_handler_req_lib_lck_resourcelockasync (
>>>>  	struct req_exec_lck_resourcelockasync req_exec_lck_resourcelockasync;
>>>>  	struct resource_instance *resource_instance;
>>>>  	struct iovec iovec;
>>>> +	int res;
>>>>  
>>>>  	/* DEBUG */
>>>>  	log_printf (LOGSYS_LEVEL_DEBUG, "LIB request: saLckResourceLockAsync\n");
>>>> @@ -3079,8 +3097,12 @@ static void message_handler_req_lib_lck_resourcelockasync (
>>>>  	req_exec_lck_resourcelockasync.invocation =
>>>>  		req_lib_lck_resourcelockasync->invocation;
>>>>  
>>>> -	hdb_handle_get (&resource_hdb, req_lib_lck_resourcelockasync->resource_id,
>>>> +	res = hdb_handle_get (&resource_hdb, req_lib_lck_resourcelockasync->resource_id,
>>>>  		(void *)&resource_instance);
>>>> +	if (res != 0) {
>>>> +		lck_resourcelock_response_send_int(conn, 0, SA_AIS_ERR_BAD_HANDLE);
>>>> +		return ;
>>>> +	}
>>>>  
>>>>  	memcpy (&req_exec_lck_resourcelockasync.callback_source,
>>>>  		&resource_instance->source, sizeof (mar_message_source_t));
>>>> -- 
>>>> 1.5.5.6
>>>>
>>>> _______________________________________________
>>>> Openais mailing list
>>>> Openais at lists.linux-foundation.org
>>>> https://lists.linux-foundation.org/mailman/listinfo/openais



More information about the Openais mailing list