Sfoglia il codice sorgente

Check for invalid handles first in API calls.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1127 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 19 anni fa
parent
commit
cb5e848f3b
1 ha cambiato i file con 13 aggiunte e 9 eliminazioni
  1. 13 9
      lib/clm.c

+ 13 - 9
lib/clm.c

@@ -523,27 +523,30 @@ saClmClusterTrack (
 	int items_to_copy;
 	unsigned int i;
 
+	error = saHandleInstanceGet (&clmHandleDatabase, clmHandle,
+		(void *)&clmInstance);
+	if (error != SA_AIS_OK) {
+		return (error);
+	}
+
 	if ((trackFlags & SA_TRACK_CHANGES) && (trackFlags & SA_TRACK_CHANGES_ONLY)) {
-		return (SA_AIS_ERR_BAD_FLAGS);
+		error = SA_AIS_ERR_BAD_FLAGS;
+		goto error_nounlock;
 	}
 
 	if (trackFlags & ~(SA_TRACK_CURRENT | SA_TRACK_CHANGES | SA_TRACK_CHANGES_ONLY)) {
-		return (SA_AIS_ERR_BAD_FLAGS);
+		error = SA_AIS_ERR_BAD_FLAGS;
+		goto error_nounlock;
 	}
 
 	if ((notificationBuffer != NULL) &&
 		(notificationBuffer->notification != NULL) &&
 		(notificationBuffer->numberOfItems == 0)) {
 
-		return (SA_AIS_ERR_INVALID_PARAM);
+		error = SA_AIS_ERR_INVALID_PARAM;
+		goto error_nounlock;
 	}
 		
-	error = saHandleInstanceGet (&clmHandleDatabase, clmHandle,
-		(void *)&clmInstance);
-	if (error != SA_AIS_OK) {
-		return (error);
-	}
-
 	req_lib_clm_clustertrack.header.size = sizeof (struct req_lib_clm_clustertrack);
 	req_lib_clm_clustertrack.header.id = MESSAGE_REQ_CLM_TRACKSTART;
 	req_lib_clm_clustertrack.track_flags = trackFlags;
@@ -600,6 +603,7 @@ saClmClusterTrack (
 error_exit:
 	pthread_mutex_unlock (&clmInstance->response_mutex);
 
+error_nounlock:
 	saHandleInstancePut (&clmHandleDatabase, clmHandle);
 
         return (error == SA_AIS_OK ? res_lib_clm_clustertrack.header.error : error);