A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Revision:
25:1101516ee67d
Parent:
23:1111ee8bcba4
Child:
27:d74f1cea23e1
--- a/session.c	Mon May 08 10:50:45 2017 -0700
+++ b/session.c	Mon May 22 10:35:21 2017 -0700
@@ -450,9 +450,10 @@
 			}
 			else
 			{
+				LINK_ENDPOINT_INSTANCE* link_endpoint;
 				detach_destroy(detach_handle);
 
-				LINK_ENDPOINT_INSTANCE* link_endpoint = find_link_endpoint_by_input_handle(session_instance, remote_handle);
+				link_endpoint = find_link_endpoint_by_input_handle(session_instance, remote_handle);
 				if (link_endpoint == NULL)
 				{
 					end_session_with_error(session_instance, "amqp:session:unattached-handle", "");
@@ -498,6 +499,7 @@
 			else
 			{
 				LINK_ENDPOINT_INSTANCE* link_endpoint_instance = NULL;
+				size_t i;
 
 				session_instance->remote_incoming_window = flow_next_incoming_id + flow_incoming_window - session_instance->next_outgoing_id;
 
@@ -513,7 +515,7 @@
 					link_endpoint_instance->frame_received_callback(link_endpoint_instance->callback_context, performative, payload_size, payload_bytes);
 				}
 
-				size_t i = 0;
+				i = 0;
 				while ((session_instance->remote_incoming_window > 0) && (i < session_instance->link_endpoint_count))
 				{
 					/* notify the caller that it can send here */
@@ -548,13 +550,14 @@
 			}
 			else
 			{
+				LINK_ENDPOINT_INSTANCE* link_endpoint;
 				transfer_destroy(transfer_handle);
 
 				session_instance->next_incoming_id++;
 				session_instance->remote_outgoing_window--;
 				session_instance->incoming_window--;
 
-				LINK_ENDPOINT_INSTANCE* link_endpoint = find_link_endpoint_by_input_handle(session_instance, remote_handle);
+				link_endpoint = find_link_endpoint_by_input_handle(session_instance, remote_handle);
 				if (link_endpoint == NULL)
 				{
 					end_session_with_error(session_instance, "amqp:session:unattached-handle", "");
@@ -592,6 +595,7 @@
 		}
 		else
 		{
+            end_destroy(end_handle);
 			if ((session_instance->session_state != SESSION_STATE_END_RCVD) &&
 				(session_instance->session_state != SESSION_STATE_DISCARDING))
 			{
@@ -1444,6 +1448,7 @@
                                         size_t temp_current_payload_index = current_payload_index;
                                         uint32_t temp_current_payload_pos = current_payload_pos;
                                         AMQP_VALUE multi_transfer_amqp_value;
+										PAYLOAD* transfer_frame_payloads;
                                         bool more;
 
                                         if (current_transfer_frame_payload_size > available_frame_size)
@@ -1489,7 +1494,7 @@
                                         }
 
                                         transfer_frame_payload_count = (uint32_t)(temp_current_payload_index - current_payload_index + 1);
-                                        PAYLOAD* transfer_frame_payloads = (PAYLOAD*)malloc(transfer_frame_payload_count * sizeof(PAYLOAD));
+                                        transfer_frame_payloads = (PAYLOAD*)malloc(transfer_frame_payload_count * sizeof(PAYLOAD));
                                         if (transfer_frame_payloads == NULL)
                                         {
                                             amqpvalue_destroy(multi_transfer_amqp_value);