diff options
author | Alan Antonuk <aega@med.umich.edu> | 2011-10-31 18:08:22 -0400 |
---|---|---|
committer | Alan Antonuk <aega@med.umich.edu> | 2011-10-31 18:10:54 -0400 |
commit | b5e20c1c1f45e88f9788810a5ca524e5b5aabb84 (patch) | |
tree | 806cd491d12ec30eb663cae643f7a89505f3e206 /librabbitmq/amqp_socket.c | |
parent | 8e746a26b0d45b437cf35d01dd676182c0a34c40 (diff) | |
download | rabbitmq-c-github-ask-simple_wait_frame.tar.gz |
Fixed my queue manipulation code in amqp_simple_wait_frame_on_channelsimple_wait_frame
Diffstat (limited to 'librabbitmq/amqp_socket.c')
-rw-r--r-- | librabbitmq/amqp_socket.c | 21 |
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; |