Просмотр исходного кода

defect 709
if synchronize async called, but no callback set, error not returned


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@747 fd59a12c-fef9-0310-b244-a6a79926bd2f

Steven Dake 20 лет назад
Родитель
Сommit
f9e2657a9a
1 измененных файлов с 15 добавлено и 0 удалено
  1. 15 0
      lib/ckpt.c

+ 15 - 0
lib/ckpt.c

@@ -1634,6 +1634,7 @@ saCkptCheckpointSynchronizeAsync (
 	SaInvocationT invocation)
 {
 	SaAisErrorT error;
+	struct ckptInstance *ckptInstance;
 	struct ckptCheckpointInstance *ckptCheckpointInstance;
 	struct req_lib_ckpt_checkpointsynchronizeasync req_lib_ckpt_checkpointsynchronizeasync;
 	struct res_lib_ckpt_checkpointsynchronizeasync res_lib_ckpt_checkpointsynchronizeasync;
@@ -1649,6 +1650,20 @@ saCkptCheckpointSynchronizeAsync (
 		goto error_put;
 	}
 
+	error = saHandleInstanceGet (&ckptHandleDatabase, ckptCheckpointInstance->ckptHandle,
+		(void *)&ckptInstance);
+	if (error != SA_AIS_OK) {
+		goto error_put;
+	}
+
+	if (ckptInstance->callbacks.saCkptCheckpointSynchronizeCallback == NULL) {
+		saHandleInstancePut (&ckptHandleDatabase, ckptCheckpointInstance->ckptHandle);
+		error = SA_AIS_ERR_INIT;
+		goto error_put;
+	}
+
+	saHandleInstancePut (&ckptHandleDatabase, ckptCheckpointInstance->ckptHandle);
+
 	req_lib_ckpt_checkpointsynchronizeasync.header.size = sizeof (struct req_lib_ckpt_checkpointsynchronizeasync); 
 	req_lib_ckpt_checkpointsynchronizeasync.header.id = MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTSYNCHRONIZEASYNC;
 	memcpy (&req_lib_ckpt_checkpointsynchronizeasync.checkpointName,