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

Ryan O'Hara rohara at redhat.com
Tue Jun 2 08:55:01 PDT 2009


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