summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Antonuk <aega@med.umich.edu>2011-10-31 18:08:22 -0400
committerAlan Antonuk <aega@med.umich.edu>2011-10-31 18:10:54 -0400
commitb5e20c1c1f45e88f9788810a5ca524e5b5aabb84 (patch)
tree806cd491d12ec30eb663cae643f7a89505f3e206
parent8e746a26b0d45b437cf35d01dd676182c0a34c40 (diff)
downloadrabbitmq-c-github-ask-simple_wait_frame.tar.gz
Fixed my queue manipulation code in amqp_simple_wait_frame_on_channelsimple_wait_frame
-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;