|
|
@@ -621,21 +621,23 @@ static int message_handler_req_exec_lck_resourceopen (
|
|
|
/*
|
|
|
* Setup connection information and mark resource as referenced
|
|
|
*/
|
|
|
- log_printf (LOG_LEVEL_DEBUG, "Lock resource opened is %p\n", resource);
|
|
|
- resource_cleanup = malloc (sizeof (struct resource_cleanup));
|
|
|
- if (resource_cleanup == 0) {
|
|
|
- free (resource);
|
|
|
- error = SA_AIS_ERR_NO_MEMORY;
|
|
|
- } else {
|
|
|
- list_init (&resource_cleanup->list);
|
|
|
- list_init (&resource_cleanup->resource_lock_list_head);
|
|
|
- resource_cleanup->resource = resource;
|
|
|
- resource_cleanup->resource_handle = req_exec_lck_resourceopen->resource_handle;
|
|
|
- list_add (
|
|
|
- &resource_cleanup->list,
|
|
|
- &req_exec_lck_resourceopen->source.conn_info->ais_ci.u.liblck_ci.resource_cleanup_list);
|
|
|
+ if (message_source_is_local (&req_exec_lck_resourceopen->source)) {
|
|
|
+ log_printf (LOG_LEVEL_DEBUG, "Lock resource opened is %p\n", resource);
|
|
|
+ resource_cleanup = malloc (sizeof (struct resource_cleanup));
|
|
|
+ if (resource_cleanup == 0) {
|
|
|
+ free (resource);
|
|
|
+ error = SA_AIS_ERR_NO_MEMORY;
|
|
|
+ } else {
|
|
|
+ list_init (&resource_cleanup->list);
|
|
|
+ list_init (&resource_cleanup->resource_lock_list_head);
|
|
|
+ resource_cleanup->resource = resource;
|
|
|
+ resource_cleanup->resource_handle = req_exec_lck_resourceopen->resource_handle;
|
|
|
+ list_add (
|
|
|
+ &resource_cleanup->list,
|
|
|
+ &req_exec_lck_resourceopen->source.conn_info->ais_ci.u.liblck_ci.resource_cleanup_list);
|
|
|
+ }
|
|
|
+ resource->refcount += 1;
|
|
|
}
|
|
|
- resource->refcount += 1;
|
|
|
|
|
|
|
|
|
/*
|
|
|
@@ -1043,45 +1045,47 @@ static int message_handler_req_exec_lck_resourcelock (
|
|
|
/*
|
|
|
* Add resource lock to cleanup handler for this api resource instance
|
|
|
*/
|
|
|
- resource_cleanup = lck_resource_cleanup_find (
|
|
|
- resource_lock->callback_source.conn_info,
|
|
|
- req_exec_lck_resourcelock->resource_handle);
|
|
|
+ if (message_source_is_local (&req_exec_lck_resourcelock->source)) {
|
|
|
+ resource_cleanup = lck_resource_cleanup_find (
|
|
|
+ resource_lock->callback_source.conn_info,
|
|
|
+ req_exec_lck_resourcelock->resource_handle);
|
|
|
|
|
|
- assert (resource_cleanup);
|
|
|
-
|
|
|
- list_add (&resource_lock->resource_cleanup_list,
|
|
|
- &resource_cleanup->resource_lock_list_head);
|
|
|
+ assert (resource_cleanup);
|
|
|
+
|
|
|
+ list_add (&resource_lock->resource_cleanup_list,
|
|
|
+ &resource_cleanup->resource_lock_list_head);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If lock queued by lock algorithm, dont send response to library now
|
|
|
+ */
|
|
|
+ if (resource_lock->lock_status != SA_LCK_LOCK_NO_STATUS) {
|
|
|
+ /*
|
|
|
+ * If lock granted or denied, deliver callback or
|
|
|
+ * response to library for non-async calls
|
|
|
+ */
|
|
|
+ lock_response_deliver (
|
|
|
+ &req_exec_lck_resourcelock->source,
|
|
|
+ resource_lock,
|
|
|
+ SA_AIS_OK);
|
|
|
+ } else {
|
|
|
+ memcpy (&resource_lock->response_source,
|
|
|
+ &req_exec_lck_resourcelock->source,
|
|
|
+ sizeof (struct message_source));
|
|
|
+ }
|
|
|
|
|
|
- /*
|
|
|
- * If lock queued by lock algorithm, dont send response to library now
|
|
|
- */
|
|
|
- if (resource_lock->lock_status != SA_LCK_LOCK_NO_STATUS) {
|
|
|
/*
|
|
|
- * If lock granted or denied, deliver callback or
|
|
|
- * response to library for non-async calls
|
|
|
+ * Deliver async response to library
|
|
|
*/
|
|
|
- lock_response_deliver (
|
|
|
+ req_exec_lck_resourcelock->source.conn_info =
|
|
|
+ req_exec_lck_resourcelock->source.conn_info->conn_info_partner;
|
|
|
+ resource_lock_async_deliver (
|
|
|
&req_exec_lck_resourcelock->source,
|
|
|
resource_lock,
|
|
|
SA_AIS_OK);
|
|
|
- } else {
|
|
|
- memcpy (&resource_lock->response_source,
|
|
|
- &req_exec_lck_resourcelock->source,
|
|
|
- sizeof (struct message_source));
|
|
|
+ req_exec_lck_resourcelock->source.conn_info =
|
|
|
+ req_exec_lck_resourcelock->source.conn_info->conn_info_partner;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Deliver async response to library
|
|
|
- */
|
|
|
- req_exec_lck_resourcelock->source.conn_info =
|
|
|
- req_exec_lck_resourcelock->source.conn_info->conn_info_partner;
|
|
|
- resource_lock_async_deliver (
|
|
|
- &req_exec_lck_resourcelock->source,
|
|
|
- resource_lock,
|
|
|
- SA_AIS_OK);
|
|
|
- req_exec_lck_resourcelock->source.conn_info =
|
|
|
- req_exec_lck_resourcelock->source.conn_info->conn_info_partner;
|
|
|
-
|
|
|
error_exit:
|
|
|
return (0);
|
|
|
}
|