Răsfoiți Sursa

Improve the async version of locking library patch from Xinwei Hu.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1557 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 17 ani în urmă
părinte
comite
80f4d57d5e
2 a modificat fișierele cu 9 adăugiri și 2 ștergeri
  1. 4 2
      exec/lck.c
  2. 5 0
      lib/lck.c

+ 4 - 2
exec/lck.c

@@ -1287,11 +1287,11 @@ error_exit:
 			res_lib_lck_resourceunlockasync.lockId = req_exec_lck_resourceunlock->lock_id;
 
 			openais_conn_send_response (
-				openais_conn_partner_get(req_exec_lck_resourceunlock->source.conn),
+				req_exec_lck_resourceunlock->source.conn,
 				&res_lib_lck_resourceunlockasync,
 				sizeof (struct res_lib_lck_resourceunlockasync));
 			openais_conn_send_response (
-				openais_conn_partner_get(resource_lock->callback_source.conn),
+				openais_conn_partner_get(req_exec_lck_resourceunlock->source.conn),
 				&res_lib_lck_resourceunlockasync,
 				sizeof (struct res_lib_lck_resourceunlockasync));
 		} else {
@@ -1419,6 +1419,7 @@ static void message_handler_req_lib_lck_resourceopenasync (
 	req_exec_lck_resourceopen.resource_handle = req_lib_lck_resourceopen->resourceHandle;
 	req_exec_lck_resourceopen.invocation = req_lib_lck_resourceopen->invocation;
 	req_exec_lck_resourceopen.open_flags = req_lib_lck_resourceopen->resourceOpenFlags;
+	req_exec_lck_resourceopen.fail_with_error = SA_AIS_OK;
 	req_exec_lck_resourceopen.timeout = 0;
 	req_exec_lck_resourceopen.async_call = 1;
 
@@ -1532,6 +1533,7 @@ static void message_handler_req_lib_lck_resourcelockasync (
 	req_exec_lck_resourcelock.resource_handle = req_lib_lck_resourcelock->resourceHandle;
 	req_exec_lck_resourcelock.async_call = 1;
 	req_exec_lck_resourcelock.invocation = req_lib_lck_resourcelock->invocation;
+	req_exec_lck_resourcelock.fail_with_error = SA_AIS_OK;
 
 	iovecs[0].iov_base = (char *)&req_exec_lck_resourcelock;
 	iovecs[0].iov_len = sizeof (req_exec_lck_resourcelock);

+ 5 - 0
lib/lck.c

@@ -463,6 +463,9 @@ saLckDispatch (
 					res_lib_lck_resourceopenasync->invocation,
 					res_lib_lck_resourceopenasync->resourceHandle,
 					res_lib_lck_resourceopenasync->header.error);
+				memcpy (&lckResourceInstance->source,
+						&res_lib_lck_resourceopenasync->source,
+						sizeof (mar_message_source_t));
 				saHandleInstancePut (&lckResourceHandleDatabase,
 					res_lib_lck_resourceopenasync->resourceHandle);
 			} else {
@@ -756,6 +759,8 @@ saLckResourceOpenAsync (
 	lckResourceInstance->lckResourceHandle = lckResourceHandle;
 	lckResourceInstance->resourceOpenFlags = resourceOpenFlags;
 
+	marshall_to_mar_name_t (&req_lib_lck_resourceopen.lockResourceName, 
+			(SaNameT *)lockResourceName);
 	memcpy (&lckResourceInstance->lockResourceName, lockResourceName, sizeof (SaNameT));
 	req_lib_lck_resourceopen.header.size = sizeof (struct req_lib_lck_resourceopen);
 	req_lib_lck_resourceopen.header.id = MESSAGE_REQ_LCK_RESOURCEOPENASYNC;