res_ari_events: Fix shutdown ref leak.
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 f1342b7..deb7f9c 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 bc763eb..aa1e3df 100644 (file)
@@ -60,6 +60,13 @@ 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.
+ *
  * \param ser HTTP TCP/TLS Server Session
  * \param headers HTTP headers
  * \param args Swagger parameters
index bf33aea..4b2b151 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 f28e832..5e06af7 100644 (file)
@@ -109,6 +109,17 @@ int ast_ari_websocket_{{c_name}}_{{c_nickname}}_init(void);
  * {{{notes}}}
 {{/notes}}
  *
+ * \return Nothing
+ */
+void ast_ari_websocket_{{c_name}}_{{c_nickname}}_dtor(void);
+
+/*!
+ * \brief {{summary}}
+{{#notes}}
+ *
+ * {{{notes}}}
+{{/notes}}
+ *
  * \param ser HTTP TCP/TLS Server Session
  * \param headers HTTP headers
  * \param args Swagger parameters