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)