diff --git a/src/mod/event_handlers/mod_amqp/mod_amqp_connection.c b/src/mod/event_handlers/mod_amqp/mod_amqp_connection.c index 8e8be16389..2d8ef8c088 100644 --- a/src/mod/event_handlers/mod_amqp/mod_amqp_connection.c +++ b/src/mod/event_handlers/mod_amqp/mod_amqp_connection.c @@ -109,7 +109,7 @@ switch_status_t mod_amqp_connection_open(mod_amqp_connection_t *connections, mod if (!(socket = amqp_tcp_socket_new(newConnection))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Could not create TCP socket\n"); - return SWITCH_STATUS_GENERR; + goto err; } connection_attempt = connections; @@ -130,7 +130,7 @@ switch_status_t mod_amqp_connection_open(mod_amqp_connection_t *connections, mod if (!connection_attempt) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Profile[%s] could not connect to any AMQP brokers\n", profile_name); - return SWITCH_STATUS_GENERR; + goto err; } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Profile[%s] opened socket connection to AMQP broker %s:%d\n", @@ -150,13 +150,15 @@ switch_status_t mod_amqp_connection_open(mod_amqp_connection_t *connections, mod if (mod_amqp_log_if_amqp_error(status, "Logging in")) { mod_amqp_connection_close(*active); *active = NULL; - return SWITCH_STATUS_GENERR; + goto err; } // Open a channel (1). This is fairly standard amqp_channel_open(newConnection, 1); if (mod_amqp_log_if_amqp_error(amqp_get_rpc_reply(newConnection), "Opening channel")) { - return SWITCH_STATUS_GENERR; + mod_amqp_connection_close(*active); + *active = NULL; + goto err; } (*active)->state = newConnection; @@ -166,6 +168,12 @@ switch_status_t mod_amqp_connection_open(mod_amqp_connection_t *connections, mod } return SWITCH_STATUS_SUCCESS; + +err: + if (newConnection) { + amqp_destroy_connection(newConnection); + } + return SWITCH_STATUS_GENERR; } switch_status_t mod_amqp_connection_create(mod_amqp_connection_t **conn, switch_xml_t cfg, switch_memory_pool_t *pool)