See P35 1-2
---
 trunk/services/msg.c |   98 +++++++++++++++++++++++++++----------------------
 1 files changed, 54 insertions(+), 44 deletions(-)

diff --git a/trunk/services/msg.c b/trunk/services/msg.c
index 12ea394..486fe9e 100644
--- a/trunk/services/msg.c
+++ b/trunk/services/msg.c
@@ -2483,6 +2483,31 @@ static void message_handler_req_exec_msg_queueopen (
        log_printf (LOGSYS_LEVEL_DEBUG, "\t queue = %s\n",
                    (char *)(req_exec_msg_queueopen->queue_name.value));
 
+       queue = msg_find_queue (&queue_list_head,
+               &req_exec_msg_queueopen->queue_name);
+
+       /* Make some tests*/
+       if (queue == NULL) {
+               if ((req_exec_msg_queueopen->create_attrs_flag == 0) ||
+                   (req_exec_msg_queueopen->open_flags & SA_MSG_QUEUE_CREATE) 
== 0)
+               {
+                       error = SA_AIS_ERR_NOT_EXIST;
+                       goto error_exit;
+               }
+       } else {
+               /* Test, if flags are same as creation flags*/
+               if ((req_exec_msg_queueopen->create_attrs.creationFlags != 
queue->create_attrs.creationFlags) ||
+                   (req_exec_msg_queueopen->create_attrs.retentionTime != 
queue->create_attrs.retentionTime) ||
+                   (memcmp (req_exec_msg_queueopen->create_attrs.size,
+                           queue->create_attrs.size,
+                           sizeof (queue->create_attrs.size)) != 0)) {
+                       /*Return error*/
+                       error = SA_AIS_ERR_EXIST;
+
+                       goto error_exit;
+               }
+       }
+
        for (i = SA_MSG_MESSAGE_HIGHEST_PRIORITY; i <= 
SA_MSG_MESSAGE_LOWEST_PRIORITY; i++) {
                if (req_exec_msg_queueopen->create_attrs.size[i] > 
MAX_PRIORITY_AREA_SIZE) {
                        error = SA_AIS_ERR_TOO_BIG;
@@ -2507,17 +2532,8 @@ static void message_handler_req_exec_msg_queueopen (
                goto error_exit;
        }
 
-       queue = msg_find_queue (&queue_list_head,
-               &req_exec_msg_queueopen->queue_name);
 
        if (queue == NULL) {
-               if ((req_exec_msg_queueopen->create_attrs_flag == 0) ||
-                   (req_exec_msg_queueopen->open_flags & SA_MSG_QUEUE_CREATE) 
== 0)
-               {
-                       error = SA_AIS_ERR_NOT_EXIST;
-                       goto error_exit;
-               }
-
                queue = malloc (sizeof (struct queue_entry));
                if (queue == NULL) {
                        error = SA_AIS_ERR_NO_MEMORY;
@@ -2552,17 +2568,6 @@ static void message_handler_req_exec_msg_queueopen (
                queue->refcount = 0;
        }
        else {
-               /* Test, if flags are same as creation flags*/
-               if ((req_exec_msg_queueopen->create_attrs.creationFlags != 
queue->create_attrs.creationFlags) ||
-                   (req_exec_msg_queueopen->create_attrs.retentionTime != 
queue->create_attrs.retentionTime) ||
-                   (memcmp (req_exec_msg_queueopen->create_attrs.size,
-                           queue->create_attrs.size,
-                           sizeof (queue->create_attrs.size)) != 0)) {
-                       /*Return error*/
-                       error = SA_AIS_ERR_EXIST;
-
-                       goto error_exit;
-               }
                if (queue->timer_handle != 0) {
                        api->timer_delete (queue->timer_handle);
                }
@@ -2609,7 +2614,8 @@ error_exit:
                        list_add_tail (&cleanup->list, 
&msg_pd->queue_cleanup_list);
                }
                else {
-                       free (cleanup);
+                       if (cleanup)
+                               free (cleanup);
                }
 
                api->ipc_response_send (
@@ -2643,6 +2649,31 @@ static void message_handler_req_exec_msg_queueopenasync (
        log_printf (LOGSYS_LEVEL_DEBUG, "\t queue = %s\n",
                    (char *)(req_exec_msg_queueopenasync->queue_name.value));
 
+       queue = msg_find_queue (&queue_list_head,
+               &req_exec_msg_queueopenasync->queue_name);
+
+       /* Make some tests*/
+       if (queue == NULL) {
+               if ((req_exec_msg_queueopenasync->create_attrs_flag == 0) ||
+                   (req_exec_msg_queueopenasync->open_flags & 
SA_MSG_QUEUE_CREATE) == 0)
+               {
+                       error = SA_AIS_ERR_NOT_EXIST;
+                       goto error_exit;
+               }
+       } else {
+               /* Test, if flags are same as creation flags*/
+               if ((req_exec_msg_queueopenasync->create_attrs.creationFlags != 
queue->create_attrs.creationFlags) ||
+                   (req_exec_msg_queueopenasync->create_attrs.retentionTime != 
queue->create_attrs.retentionTime) ||
+                   (memcmp (req_exec_msg_queueopenasync->create_attrs.size,
+                           queue->create_attrs.size,
+                           sizeof (queue->create_attrs.size)) != 0)) {
+                       /*Return error*/
+                       error = SA_AIS_ERR_EXIST;
+
+                       goto error_exit;
+               }
+       }
+
        for (i = SA_MSG_MESSAGE_HIGHEST_PRIORITY; i <= 
SA_MSG_MESSAGE_LOWEST_PRIORITY; i++) {
                if (req_exec_msg_queueopenasync->create_attrs.size[i] > 
MAX_PRIORITY_AREA_SIZE) {
                        error = SA_AIS_ERR_TOO_BIG;
@@ -2667,17 +2698,7 @@ static void message_handler_req_exec_msg_queueopenasync (
                goto error_exit;
        }
 
-       queue = msg_find_queue (&queue_list_head,
-               &req_exec_msg_queueopenasync->queue_name);
-
        if (queue == NULL) {
-               if ((req_exec_msg_queueopenasync->create_attrs_flag == 0) &&
-                   (req_exec_msg_queueopenasync->open_flags & 
SA_MSG_QUEUE_CREATE) == 0)
-               {
-                       error = SA_AIS_ERR_NOT_EXIST;
-                       goto error_exit;
-               }
-
                queue = malloc (sizeof (struct queue_entry));
                if (queue == NULL) {
                        error = SA_AIS_ERR_NO_MEMORY;
@@ -2712,18 +2733,6 @@ static void message_handler_req_exec_msg_queueopenasync (
                queue->refcount = 0;
        }
        else {
-               /* Test, if flags are same as creation flags*/
-               if ((req_exec_msg_queueopenasync->create_attrs.creationFlags != 
queue->create_attrs.creationFlags) ||
-                   (req_exec_msg_queueopenasync->create_attrs.retentionTime != 
queue->create_attrs.retentionTime) ||
-                   (memcmp (req_exec_msg_queueopenasync->create_attrs.size,
-                           queue->create_attrs.size,
-                           sizeof (queue->create_attrs.size)) != 0)) {
-                       /*Return error*/
-                       error = SA_AIS_ERR_EXIST;
-
-                       goto error_exit;
-               }
-
                if (queue->timer_handle != 0) {
                        api->timer_delete (queue->timer_handle);
                }
@@ -2770,7 +2779,8 @@ error_exit:
                        list_add_tail (&cleanup->list, 
&msg_pd->queue_cleanup_list);
                }
                else {
-                       free (cleanup);
+                       if (cleanup)
+                               free (cleanup);
                }
 
                api->ipc_response_send (
-- 
1.5.5.6

_______________________________________________
Openais mailing list
Openais@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to