This patch complete the msgInstanceFinalize and queueInstanceFinalize
calls.
Also added list of queueInstances (queue_list) to msgInstance, which
is needed in order to finalize the queueInstances.
Ryan
Index: lib/msg.c
===================================================================
--- lib/msg.c (revision 1921)
+++ lib/msg.c (working copy)
@@ -67,6 +67,7 @@
SaMsgHandleT msg_handle;
SaMsgCallbacksT callbacks;
int finalize;
+ struct list_head queue_list;
};
struct queueInstance {
@@ -77,6 +78,7 @@
SaMsgQueueHandleT queue_handle;
SaMsgQueueOpenFlagsT open_flags;
SaMsgQueueCreationAttributesT create_attrs;
+ struct list_head list;
};
DECLARE_HDB_DATABASE(msgHandleDatabase, NULL);
@@ -92,19 +94,34 @@
msgVersionsSupported
};
-#ifdef COMPILE_OUT
-static void msgInstanceFinalize (struct msgInstance *msgInstance)
+static void queueInstanceFinalize (struct queueInstance *queueInstance)
{
+ list_del (&queueInstance->list);
+
+ hdb_handle_destroy (&queueHandleDatabase, queueInstance->queue_handle);
+
return;
}
-static void queueInstanceFinalize (struct queueInstance *queueInstance)
+static void msgInstanceFinalize (struct msgInstance *msgInstance)
{
+ struct queueInstance *queueInstance;
+ struct list_head *queueInstanceList;
+
+ queueInstanceList = msgInstance->queue_list.next;
+
+ while (queueInstanceList != &msgInstance->queue_list)
+ {
+ queueInstance = list_entry (queueInstanceList, struct
queueInstance, list);
+ queueInstanceList = queueInstanceList->next;
+ queueInstanceFinalize (queueInstance);
+ }
+
+ hdb_handle_destroy (&msgHandleDatabase, msgInstance->msg_handle);
+
return;
}
-#endif /* COMPILE_OUT */
-
SaAisErrorT
saMsgInitialize (
SaMsgHandleT *msgHandle,
@@ -152,6 +169,8 @@
memset (&msgInstance->callbacks, 0, sizeof (SaMsgCallbacksT));
}
+ list_init (&msgInstance->queue_list);
+
msgInstance->msg_handle = *msgHandle;
hdb_handle_put (&msgHandleDatabase, *msgHandle);
@@ -341,23 +360,25 @@
error = hdb_error_to_sa (hdb_handle_get (&msgHandleDatabase,
msgHandle, (void *)&msgInstance));
if (error != SA_AIS_OK) {
- return (error);
+ goto error_exit;
}
if (msgInstance->finalize) {
hdb_handle_put (&msgHandleDatabase, msgHandle);
- return (SA_AIS_ERR_BAD_HANDLE);
+ error = SA_AIS_ERR_BAD_HANDLE;
+ goto error_exit;
}
msgInstance->finalize = 1;
- /* msgInstanceFinalize (msgInstance); */
+ coroipcc_service_disconnect (msgInstance->ipc_handle);
- error = coroipcc_service_disconnect (msgInstance->ipc_handle); /* ? */
+ msgInstanceFinalize (msgInstance);
hdb_handle_put (&msgHandleDatabase, msgHandle);
- return (SA_AIS_OK);
+error_exit:
+ return (error);
}
SaAisErrorT
@@ -435,6 +456,7 @@
queueInstance->ipc_handle = msgInstance->ipc_handle;
queueInstance->open_flags = openFlags;
+ queueInstance->queue_handle = *queueHandle;
req_lib_msg_queueopen.header.size =
sizeof (struct req_lib_msg_queueopen);
@@ -481,6 +503,9 @@
queueInstance->queue_id = res_lib_msg_queueopen.queue_id;
+ list_init (&queueInstance->list);
+ list_add_tail (&queueInstance->list, &msgInstance->queue_list);
+
hdb_handle_put (&queueHandleDatabase, *queueHandle);
hdb_handle_put (&msgHandleDatabase, msgHandle);
@@ -575,6 +600,7 @@
queueInstance->ipc_handle = msgInstance->ipc_handle;
queueInstance->open_flags = openFlags;
+ queueInstance->queue_handle = queueHandle;
req_lib_msg_queueopenasync.header.size =
sizeof (struct req_lib_msg_queueopenasync);
@@ -621,6 +647,9 @@
queueInstance->queue_id = res_lib_msg_queueopenasync.queue_id;
+ list_init (&queueInstance->list);
+ list_add_tail (&queueInstance->list, &msgInstance->queue_list);
+
hdb_handle_put (&queueHandleDatabase, queueHandle);
hdb_handle_put (&msgHandleDatabase, msgHandle);
@@ -684,11 +713,13 @@
goto error_put; /* ! */
}
- /*No Error -> destroy handle*/
+ list_del (&queueInstance->list);
+
hdb_handle_put (&queueHandleDatabase, queueHandle);
hdb_handle_destroy (&queueHandleDatabase, queueHandle);
return (error);
+
error_put:
hdb_handle_put (&queueHandleDatabase, queueHandle);
error_exit:
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais