[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openais
Subject:    [Openais] Previous patches
From:       Mark Haverkamp <markh () osdl ! org>
Date:       2005-05-24 22:02:02
Message-ID: 1116972123.13106.37.camel () markh1 ! pdx ! osdl ! net
[Download RAW message or body]

I sent these out a while ago.  So I plan on checking them in tomorrow if
there are no objections.

Thanks,
Mark.

-- 
Mark Haverkamp <markh@osdl.org>

["ais_evt_err_codes-2.patch" (ais_evt_err_codes-2.patch)]

===== exec/evt.c 1.31 vs edited =====
--- 1.31/exec/evt.c	2005-04-20 17:57:23 -07:00
+++ edited/exec/evt.c	2005-05-13 11:30:49 -07:00
@@ -2258,7 +2258,7 @@
 	if (!ucp) {
 		log_printf(LOG_LEVEL_ERROR,
 				"saEvtChannelUnlink: Memory allocation failure\n");
-		error = SA_AIS_ERR_NO_MEMORY;
+		error = SA_AIS_ERR_TRY_AGAIN;
 		goto evt_unlink_err;
 	}
 
@@ -2465,7 +2465,7 @@
 	 */
 	ecs = find_subscr(eco, req->icu_sub_id); 
 	if (!ecs) {
-		error = SA_AIS_ERR_INVALID_PARAM;
+		error = SA_AIS_ERR_NOT_EXIST;
 		goto unsubr_put;
 	}
 
@@ -2569,7 +2569,9 @@
 	struct res_evt_event_clear_retentiontime res;
 	struct req_evt_chan_command cpkt;
 	struct iovec rtn_iovec;
-	SaErrorT error = SA_AIS_OK;
+	struct event_data *edp;
+	struct list_head *l, *nxt;
+	SaErrorT error = SA_AIS_ERR_NOT_EXIST;
 	int ret;
 
 	req = message;
@@ -2581,16 +2583,33 @@
 			req->iec_event_id,
 			req->iec_channel_handle);
 
-	memset(&cpkt, 0, sizeof(cpkt));
-	cpkt.chc_head.id = MESSAGE_REQ_EXEC_EVT_CHANCMD;
-	cpkt.chc_head.size = sizeof(cpkt);
-	cpkt.chc_op = EVT_CLEAR_RET_OP;
-	cpkt.u.chc_event_id = req->iec_event_id;
-	rtn_iovec.iov_base = &cpkt;
-	rtn_iovec.iov_len = cpkt.chc_head.size;
-	ret = totempg_mcast (&rtn_iovec, 1, TOTEMPG_AGREED);
-	if (ret != 0) {
-			error = SA_AIS_ERR_LIBRARY;
+	/*
+	 * Make sure that the event really exists first
+	 */
+	for (l = retained_list.next; l != &retained_list; l = nxt) {
+		nxt = l->next;
+		edp = list_entry(l, struct event_data, ed_retained);
+		if (edp->ed_event.led_event_id == req->iec_event_id) {
+		error = SA_AIS_OK;
+				break;
+		}
+	}
+
+	/*
+	 * Then, if it's OK, send the clear request
+	 */
+	if (error == SA_AIS_OK) {
+		memset(&cpkt, 0, sizeof(cpkt));
+		cpkt.chc_head.id = MESSAGE_REQ_EXEC_EVT_CHANCMD;
+		cpkt.chc_head.size = sizeof(cpkt);
+		cpkt.chc_op = EVT_CLEAR_RET_OP;
+		cpkt.u.chc_event_id = req->iec_event_id;
+		rtn_iovec.iov_base = &cpkt;
+		rtn_iovec.iov_len = cpkt.chc_head.size;
+		ret = totempg_mcast (&rtn_iovec, 1, TOTEMPG_AGREED);
+		if (ret != 0) {
+				error = SA_AIS_ERR_LIBRARY;
+		}
 	}
 
 	res.iec_head.size = sizeof(res);
===== lib/evt.c 1.21 vs edited =====
--- 1.21/lib/evt.c	2005-04-22 11:45:49 -07:00
+++ edited/lib/evt.c	2005-05-13 11:10:46 -07:00
@@ -292,6 +292,9 @@
 	error = saHandleInstanceGet(&evt_instance_handle_db, *evtHandle,
 			(void*)&evti);
 	if (error != SA_AIS_OK) {
+		if (error == SA_AIS_ERR_BAD_HANDLE) {
+			error = SA_AIS_ERR_LIBRARY;
+		}
 		goto error_handle_free;
 	}
 	memset(evti, 0, sizeof(*evti));
@@ -382,6 +385,9 @@
 	error = saHandleCreate(&event_handle_db, sizeof(*edi), 
 		(void*)event_handle);
 	if (error != SA_AIS_OK) {
+		if (error == SA_AIS_ERR_NO_MEMORY) {
+			error = SA_AIS_ERR_LIBRARY;
+		}
 			goto make_evt_done;
 	}
 
@@ -424,7 +430,7 @@
 		edi->edi_patterns.patterns[i].pattern = malloc(pat->patternSize);
 		if (!edi->edi_patterns.patterns[i].pattern) {
 			printf("make_event: couldn't alloc %lld bytes\n", pat->patternSize);
-			error =  SA_AIS_ERR_NO_MEMORY;
+			error =  SA_AIS_ERR_LIBRARY;
 			break;
 		}
 		memcpy(edi->edi_patterns.patterns[i].pattern,
@@ -1373,17 +1379,28 @@
 	 * pattern count of the event.  This way the caller can tell
 	 * if it got all the possible patterns. If the returned number
 	 * is more that the number supplied, then some available patterns
-	 * were not returned.
+	 * were not returned. We indicate that by returning SA_AIS_ERR_NO_SPACE.
 	 *
 	 * The same thing happens when copying the pattern strings.
 	 */
+	if (patternArray->patternsNumber < edi->edi_patterns.patternsNumber) {
+		error = SA_AIS_ERR_NO_SPACE;
+	}
+
 	patternArray->patternsNumber = edi->edi_patterns.patternsNumber;
 
 	for (i = 0; i < npats; i++) {
+
 		memcpy(patternArray->patterns[i].pattern,
 			edi->edi_patterns.patterns[i].pattern,
 			min(patternArray->patterns[i].patternSize,
 				edi->edi_patterns.patterns[i].patternSize));
+
+		if (patternArray->patterns[i].patternSize < 
+								edi->edi_patterns.patterns[i].patternSize) {
+			error = SA_AIS_ERR_NO_SPACE;
+		}
+
 		patternArray->patterns[i].patternSize = 
 			edi->edi_patterns.patterns[i].patternSize;
 	}
@@ -1424,6 +1441,9 @@
 	if (edi->edi_event_data && edi->edi_event_data_size) {
 		xfsize = min(*eventDataSize, edi->edi_event_data_size);
 		*eventDataSize = edi->edi_event_data_size;
+		if (*eventDataSize < edi->edi_event_data_size) {
+			error = SA_AIS_ERR_NO_SPACE;
+		}
 		memcpy(eventData, edi->edi_event_data, xfsize);
 	} else {
 		*eventDataSize = 0;
@@ -1737,7 +1757,7 @@
 	 * See if we can subscribe to this channel
 	 */
 	if (!(eci->eci_open_flags & SA_EVT_CHANNEL_SUBSCRIBER)) {
-		error = SA_AIS_ERR_INVALID_PARAM;
+		error = SA_AIS_ERR_ACCESS;
 		goto subscribe_put2;
 	}
 
===== lib/util.c 1.15 vs edited =====
--- 1.15/lib/util.c	2005-04-15 13:48:25 -07:00
+++ edited/lib/util.c	2005-05-13 10:54:24 -07:00
@@ -90,11 +90,11 @@
 	strcpy (address.sun_path + 1, "libais.socket");
 	fd = socket (PF_UNIX, SOCK_STREAM, 0);
 	if (fd == -1) {
-		return (SA_ERR_SYSTEM);
+		return (SA_AIS_ERR_NO_RESOURCES);
 	}
 	result = connect (fd, (struct sockaddr *)&address, sizeof (address));
 	if (result == -1) {
-		return (SA_ERR_TRY_AGAIN);
+		return (SA_AIS_ERR_TRY_AGAIN);
 	}
 
 	req_lib_response_init.resdis_header.size = sizeof (req_lib_response_init);
@@ -103,25 +103,25 @@
 
 	error = saSendRetry (fd, &req_lib_response_init,
 		sizeof (struct req_lib_response_init), MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 	error = saRecvRetry (fd, &res_lib_response_init,
 		sizeof (struct res_lib_response_init), MSG_WAITALL | MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 
 	/*
 	 * Check for security errors
 	 */
-	if (res_lib_response_init.header.error != SA_OK) {
+	if (res_lib_response_init.header.error != SA_AIS_OK) {
 		error = res_lib_response_init.header.error;
 		goto error_exit;
 	}
 
 	*fdOut = fd;
-	return (SA_OK);
+	return (SA_AIS_OK);
 error_exit:
 	close (fd);
 	return (error);
@@ -155,11 +155,11 @@
 	strcpy (address.sun_path + 1, "libais.socket");
 	responseFD = socket (PF_UNIX, SOCK_STREAM, 0);
 	if (responseFD == -1) {
-		return (SA_ERR_SYSTEM);
+		return (SA_AIS_ERR_NO_RESOURCES);
 	}
 	result = connect (responseFD, (struct sockaddr *)&address, sizeof (address));
 	if (result == -1) {
-		return (SA_ERR_TRY_AGAIN);
+		return (SA_AIS_ERR_TRY_AGAIN);
 	}
 
 	req_lib_response_init.resdis_header.size = sizeof (req_lib_response_init);
@@ -169,20 +169,20 @@
 	error = saSendRetry (responseFD, &req_lib_response_init,
 		sizeof (struct req_lib_response_init),
 		MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 	error = saRecvRetry (responseFD, &res_lib_response_init,
 		sizeof (struct res_lib_response_init),
 		MSG_WAITALL | MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 
 	/*
 	 * Check for security errors
 	 */
-	if (res_lib_response_init.header.error != SA_OK) {
+	if (res_lib_response_init.header.error != SA_AIS_OK) {
 		error = res_lib_response_init.header.error;
 		goto error_exit;
 	}
@@ -192,11 +192,11 @@
 /* if I comment out the 4 lines below the executive crashes */
 	callbackFD = socket (PF_UNIX, SOCK_STREAM, 0);
 	if (callbackFD == -1) {
-		return (SA_ERR_SYSTEM);
+		return (SA_AIS_ERR_NO_RESOURCES);
 	}
 	result = connect (callbackFD, (struct sockaddr *)&address, sizeof (address));
 	if (result == -1) {
-		return (SA_ERR_TRY_AGAIN);
+		return (SA_AIS_ERR_TRY_AGAIN);
 	}
 
 	req_lib_dispatch_init.resdis_header.size = sizeof (req_lib_dispatch_init);
@@ -208,26 +208,26 @@
 	error = saSendRetry (callbackFD, &req_lib_dispatch_init,
 		sizeof (struct req_lib_dispatch_init),
 		MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit_two;
 	}
 	error = saRecvRetry (callbackFD, &res_lib_dispatch_init,
 		sizeof (struct res_lib_dispatch_init),
 		MSG_WAITALL | MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit_two;
 	}
 
 	/*
 	 * Check for security errors
 	 */
-	if (res_lib_dispatch_init.header.error != SA_OK) {
+	if (res_lib_dispatch_init.header.error != SA_AIS_OK) {
 		error = res_lib_dispatch_init.header.error;
 		goto error_exit;
 	}
 
 	*callbackOut = callbackFD;
-	return (SA_OK);
+	return (SA_AIS_OK);
 
 error_exit_two:
 	close (callbackFD);
@@ -243,7 +243,7 @@
 	size_t len,
 	int flags)
 {
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 	int result;
 	struct msghdr msg_recv;
 	struct iovec iov_recv;
@@ -267,7 +267,7 @@
 		goto retry_recv;
 	}
 	if (result == -1 || result == 0) {
-		error = SA_ERR_MESSAGE_ERROR;
+		error = SA_AIS_ERR_LIBRARY;
 		goto error_exit;
 	}
 	processed += result;
@@ -291,7 +291,7 @@
 	size_t len,
 	int flags)
 {
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 	int result;
 
 	struct msghdr msg_send;
@@ -314,7 +314,7 @@
 		goto retry_send;
 	}
 	if (result == -1) {
-		error = SA_ERR_SYSTEM;
+		error = SA_AIS_ERR_LIBRARY;
 	}
 	return (error);
 }
@@ -324,7 +324,7 @@
         struct iovec *iov,
         int iov_len)
 {
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 	int result;
 
 	struct msghdr msg_send;
@@ -343,7 +343,7 @@
 		goto retry_send;
 	}
 	if (result == -1) {
-		error = SA_ERR_SYSTEM;
+		error = SA_AIS_ERR_LIBRARY;
 	}
 	return (error);
 }
@@ -355,16 +355,16 @@
         void *responseMessage,
         int responseLen)
 {
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 
 	error = saSendMsgRetry (s, iov, iov_len);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 	
 	error = saRecvRetry (s, responseMessage, responseLen,
 		MSG_WAITALL | MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 
@@ -379,17 +379,17 @@
         void *responseMessage,
         int responseLen)
 {
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 
 	error = saSendRetry (s, requestMessage, requestLen,
 		MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 	
 	error = saRecvRetry (s, responseMessage, responseLen,
 		MSG_WAITALL | MSG_NOSIGNAL);
-	if (error != SA_OK) {
+	if (error != SA_AIS_OK) {
 		goto error_exit;
 	}
 
@@ -405,7 +405,7 @@
 	fd_set *exceptfds,
 	struct timeval *timeout)
 {
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 	int result;
 
 retry_select:
@@ -414,7 +414,7 @@
 		goto retry_select;
 	}
 	if (result == -1) {
-		error = SA_ERR_SYSTEM;
+		error = SA_AIS_ERR_LIBRARY;
 	}
 
 	return (error);
@@ -426,7 +426,7 @@
         unsigned int nfds,
         int timeout) 
 {
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 	int result;
 
 retry_poll:
@@ -435,7 +435,7 @@
 		goto retry_poll;
 	}
 	if (result == -1) {
-		error = SA_ERR_SYSTEM;
+		error = SA_AIS_ERR_LIBRARY;
 	}
 
 	return (error);
@@ -468,14 +468,14 @@
 			sizeof (struct saHandle) * handleDatabase->handleCount);
 		if (newHandles == 0) {
 			pthread_mutex_unlock (&handleDatabase->mutex);
-			return (SA_ERR_NO_MEMORY);
+			return (SA_AIS_ERR_NO_MEMORY);
 		}
 		handleDatabase->handles = newHandles;
 	}
 
 	instance = malloc (instanceSize);
 	if (instance == 0) {
-		return (SA_ERR_NO_MEMORY);
+		return (SA_AIS_ERR_NO_MEMORY);
 	}
 	memset (instance, 0, instanceSize);
 
@@ -489,7 +489,7 @@
 
 	pthread_mutex_unlock (&handleDatabase->mutex);
 
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 
@@ -503,7 +503,7 @@
 	pthread_mutex_unlock (&handleDatabase->mutex);
 	saHandleInstancePut (handleDatabase, handle);
 
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 
@@ -513,15 +513,15 @@
 	SaUint64T handle,
 	void **instance)
 { 
-	SaErrorT error = SA_OK;
+	SaErrorT error = SA_AIS_OK;
 	pthread_mutex_lock (&handleDatabase->mutex);
 
 	if (handle >= (SaUint64T)handleDatabase->handleCount) {
-		error = SA_ERR_BAD_HANDLE;
+		error = SA_AIS_ERR_BAD_HANDLE;
 		goto error_exit;
 	}
 	if (handleDatabase->handles[handle].state != SA_HANDLE_STATE_ACTIVE) {
-		error = SA_ERR_BAD_HANDLE;
+		error = SA_AIS_ERR_BAD_HANDLE;
 		goto error_exit;
 	}
 
@@ -557,7 +557,7 @@
 
 	pthread_mutex_unlock (&handleDatabase->mutex);
 
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 
@@ -570,7 +570,7 @@
 	int i;
 
 	if (version == 0) {
-		return (SA_ERR_VERSION);
+		return (SA_AIS_ERR_VERSION);
 	}
 
 	for (i = 0; i < versionDatabase->versionCount; i++) {
@@ -579,7 +579,7 @@
 			break;
 		}
 	}
-	return (found ? SA_OK : SA_ERR_VERSION);
+	return (found ? SA_AIS_OK : SA_AIS_ERR_VERSION);
 }
 
 
@@ -597,10 +597,10 @@
 	queue->bytesPerItem = bytesPerItem;
 	queue->items = (void *)malloc (queueItems * bytesPerItem);
 	if (queue->items == 0) {
-		return (SA_ERR_NO_MEMORY);
+		return (SA_AIS_ERR_NO_MEMORY);
 	}
 	memset (queue->items, 0, queueItems * bytesPerItem);
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 SaErrorT
@@ -609,7 +609,7 @@
 	int *isFull)
 {
 	*isFull = ((queue->size - 1) == queue->used);
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 
@@ -619,7 +619,7 @@
 	int *isEmpty)
 {
 	*isEmpty = (queue->used == 0);
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 
@@ -638,14 +638,14 @@
 
 	assert (queue->tail != queue->head);
 	if (queue->tail == queue->head) {
-		return (SA_ERR_LIBRARY);
+		return (SA_AIS_ERR_LIBRARY);
 	}
 	queue->head = (queue->head + 1) % queue->size;
 	queue->used++;
 	if (queue->used > queue->usedhw) {
 		queue->usedhw = queue->used;
 	}
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 SaErrorT
@@ -658,7 +658,7 @@
 	queueItem = queue->items;
 	queueItem += queuePosition * queue->bytesPerItem;
 	*item = (void *)queueItem;
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 SaErrorT
@@ -666,10 +666,10 @@
 {
 	queue->tail = (queue->tail + 1) % queue->size;
 	if (queue->tail == queue->head) {
-		return (SA_ERR_LIBRARY);
+		return (SA_AIS_ERR_LIBRARY);
 	}
 	queue->used--;
-	return (SA_OK);
+	return (SA_AIS_OK);
 }
 
 /*
===== test/testevt.c 1.10 vs edited =====
--- 1.10/test/testevt.c	2005-04-22 11:46:17 -07:00
+++ edited/test/testevt.c	2005-05-13 11:23:38 -07:00
@@ -557,7 +557,7 @@
 		result = saEvtEventUnsubscribe(channel_handle, 
 				subscription_id+2);
 	} while ((result == SA_AIS_ERR_TRY_AGAIN) && !sleep(TRY_WAIT));
-	if (result != SA_AIS_ERR_INVALID_PARAM) {
+	if (result != SA_AIS_ERR_NOT_EXIST) {
 		get_sa_error(result, result_buf, result_buf_len);
 		printf("ERROR: event unsubscribe result: %s\n", result_buf);
 		do {

["ais_evt_subscribe.patch" (ais_evt_subscribe.patch)]

===== test/subscription.c 1.8 vs edited =====
--- 1.8/test/subscription.c	2005-04-22 11:45:55 -07:00
+++ edited/test/subscription.c	2005-05-10 09:39:07 -07:00
@@ -170,7 +170,8 @@
 
 		if (pfd.revents & (POLLERR|POLLHUP)) {
 			printf("Error recieved on poll fd %lld\n", fd);
-			return SA_AIS_ERR_BAD_OPERATION;
+			result =  SA_AIS_ERR_BAD_OPERATION;
+			goto sub_fin;
 		}
 		do {
 			result = saEvtDispatch(handle, SA_DISPATCH_ONE);
@@ -304,7 +305,7 @@
 	}
 
 	if (event_id == SA_EVT_EVENTID_LOST) {
-		return;
+		goto evt_free;
 	}
 
 #ifdef TEST_EVENT_ORDER


_______________________________________________
Openais mailing list
Openais@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/openais


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic