diff options
author | Tony Garnock-Jones <tonyg@kcbbs.gen.nz> | 2009-05-12 06:26:57 +0100 |
---|---|---|
committer | Tony Garnock-Jones <tonyg@kcbbs.gen.nz> | 2009-05-12 06:26:57 +0100 |
commit | 7f2f5663d5a4b8c80e12d47608aa33241677d101 (patch) | |
tree | 7d5a60978e8f8a3383913aeed38ee6d31b85d022 /librabbitmq | |
parent | 9d08293b8e27defb7dba4d84d9f7c11d3520d995 (diff) | |
download | rabbitmq-c-github-ask-7f2f5663d5a4b8c80e12d47608aa33241677d101.tar.gz |
Correct test for connection exception frames.
Diffstat (limited to 'librabbitmq')
-rw-r--r-- | librabbitmq/amqp_socket.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c index 60911d1..b42ba47 100644 --- a/librabbitmq/amqp_socket.c +++ b/librabbitmq/amqp_socket.c @@ -223,12 +223,22 @@ amqp_rpc_reply_t amqp_simple_rpc(amqp_connection_state_t state, return result; } - if (!((frame.frame_type == AMQP_FRAME_METHOD) && - (frame.channel == channel) && - ((frame.payload.method.id == expected_reply_id) || - (frame.payload.method.id == AMQP_CONNECTION_CLOSE_METHOD) || - (frame.payload.method.id == AMQP_CHANNEL_CLOSE_METHOD)))) - { + /* + * We store the frame for later processing unless it's something + * that directly affects us here, namely a method frame that is + * either + * - on the channel we want, and of the expected type, or + * - on the channel we want, and a channel.close frame, or + * - on channel zero, and a connection.close frame. + */ + if (!( (frame.frame_type == AMQP_FRAME_METHOD) && + ( ((frame.channel == channel) && + ((frame.payload.method.id == expected_reply_id) || + (frame.payload.method.id == AMQP_CHANNEL_CLOSE_METHOD))) + || + ((frame.channel == 0) && + (frame.payload.method.id == AMQP_CONNECTION_CLOSE_METHOD)) ) )) + { amqp_frame_t *frame_copy = amqp_pool_alloc(&state->decoding_pool, sizeof(amqp_frame_t)); amqp_link_t *link = amqp_pool_alloc(&state->decoding_pool, sizeof(amqp_link_t)); |