]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_ari_events: Fix shutdown ref leak. 14/1114/1
authorRichard Mudgett <rmudgett@digium.com>
Tue, 18 Aug 2015 20:07:49 +0000 (15:07 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 18 Aug 2015 21:44:06 +0000 (16:44 -0500)
ASTERISK-25308 #close
Reported by: Joshua Colp

Change-Id: I592785bf70ff4b63d00e535b482f40da8e82a082

res/ari/resource_events.c
res/ari/resource_events.h
res/res_ari_events.c
rest-api-templates/ari_resource.h.mustache

index f1342b7fae3cfd9dab65ba7261d264f8d925d8e2..deb7f9cc05774db3861a60db18d24ff15b3c65ff 100644 (file)
@@ -103,12 +103,12 @@ static void stasis_app_message_handler(
                        msg_type,
                        msg_application);
        } else if (!session->ws_session) {
-                       /* If the websocket is NULL, the message goes to the queue */
-                       AST_VECTOR_APPEND(&session->message_queue, message);
-                       ast_log(LOG_WARNING,
-                               "Queued '%s' message for Stasis app '%s'; websocket is not ready\n",
-                               msg_type,
-                               msg_application);
+               /* If the websocket is NULL, the message goes to the queue */
+               AST_VECTOR_APPEND(&session->message_queue, message);
+               ast_log(LOG_WARNING,
+                               "Queued '%s' message for Stasis app '%s'; websocket is not ready\n",
+                               msg_type,
+                               msg_application);
        } else {
                /* We are ready to publish the message */
                ast_ari_websocket_session_write(session->ws_session, message);
@@ -426,13 +426,18 @@ static int event_session_alloc(struct ast_tcptls_session_instance *ser,
        return 0;
 }
 
+void ast_ari_websocket_events_event_websocket_dtor(void)
+{
+       ao2_cleanup(event_session_registry);
+       event_session_registry = NULL;
+}
+
 int ast_ari_websocket_events_event_websocket_init(void)
 {
        /* Try to instantiate the registry */
        event_session_registry = ao2_container_alloc(EVENT_SESSION_NUM_BUCKETS,
                                                     event_session_hash,
                                                     event_session_compare);
-
        if (!event_session_registry) {
                /* This is bad, bad. */
                ast_log(LOG_WARNING,
index bc763ebd3874f0a1b71a81696cddfd2c18500585..aa1e3dfd645f2c829419477e8d4c95bf2b1f5bc3 100644 (file)
@@ -57,6 +57,13 @@ struct ast_ari_events_event_websocket_args {
  */
 int ast_ari_websocket_events_event_websocket_init(void);
 
+/*!
+ * \brief WebSocket connection for events.
+ *
+ * \return Nothing
+ */
+void ast_ari_websocket_events_event_websocket_dtor(void);
+
 /*!
  * \brief WebSocket connection for events.
  *
index bf33aeaff27a8f24a1900260a3d4f703b87ce438..4b2b151aa0ad0b339d1e51550fc9449d24da306e 100644 (file)
@@ -462,6 +462,7 @@ static int unload_module(void)
        ast_ari_remove_handler(&events);
        ao2_cleanup(events.ws_server);
        events.ws_server = NULL;
+       ast_ari_websocket_events_event_websocket_dtor();
        stasis_app_unref();
        return 0;
 }
index f28e832d189dd374890c0b6e3764d2a62b5d4d4c..5e06af734f7f56a1a219649134132aad2c6cbb8c 100644 (file)
@@ -102,6 +102,17 @@ void ast_ari_{{c_name}}_{{c_nickname}}(struct ast_variable *headers, struct ast_
  */
 int ast_ari_websocket_{{c_name}}_{{c_nickname}}_init(void);
 
+/*!
+ * \brief {{summary}}
+{{#notes}}
+ *
+ * {{{notes}}}
+{{/notes}}
+ *
+ * \return Nothing
+ */
+void ast_ari_websocket_{{c_name}}_{{c_nickname}}_dtor(void);
+
 /*!
  * \brief {{summary}}
 {{#notes}}