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