summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--librabbitmq/amqp_socket.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c
index ff9fe93..b8b4638 100644
--- a/librabbitmq/amqp_socket.c
+++ b/librabbitmq/amqp_socket.c
@@ -241,7 +241,14 @@ int amqp_simple_wait_frame_on_channel(amqp_connection_state_t state,
frame_ptr = (amqp_frame_t*)cur->data;
if (frame_ptr->channel == channel)
{
- prev->next = cur->next;
+ if (cur == state->first_queued_frame)
+ {
+ state->first_queued_frame = cur->next;
+ }
+ else
+ {
+ prev->next = cur->next;
+ }
*decoded_frame = *frame_ptr;
return 0;
}
@@ -259,11 +266,21 @@ int amqp_simple_wait_frame_on_channel(amqp_connection_state_t state,
}
cur = (amqp_link_t*)amqp_pool_alloc(&state->decoding_pool, sizeof(amqp_link_t));
frame_ptr = (amqp_frame_t*)amqp_pool_alloc(&state->decoding_pool, sizeof(amqp_frame_t));
+ if (frame_ptr == NULL || cur == NULL) {
+ return -ERROR_NO_MEMORY;
+ }
*frame_ptr = frame;
cur->data = frame_ptr;
cur->next = NULL;
- prev->next = cur;
+ if (prev == NULL)
+ {
+ state->first_queued_frame = cur;
+ }
+ else
+ {
+ prev->next = cur;
+ }
prev = cur;
}
return wait_return;