Skip to content
Snippets Groups Projects
Commit 03eb6cbc authored by Richard Mudgett's avatar Richard Mudgett
Browse files

res_ari_events: Fix shutdown ref leak.

ASTERISK-25308 #close
Reported by: Joshua Colp

Change-Id: I592785bf70ff4b63d00e535b482f40da8e82a082
parent e1e7e205
No related branches found
No related tags found
No related merge requests found
...@@ -103,12 +103,12 @@ static void stasis_app_message_handler( ...@@ -103,12 +103,12 @@ static void stasis_app_message_handler(
msg_type, msg_type,
msg_application); msg_application);
} else if (!session->ws_session) { } else if (!session->ws_session) {
/* If the websocket is NULL, the message goes to the queue */ /* If the websocket is NULL, the message goes to the queue */
AST_VECTOR_APPEND(&session->message_queue, message); AST_VECTOR_APPEND(&session->message_queue, message);
ast_log(LOG_WARNING, ast_log(LOG_WARNING,
"Queued '%s' message for Stasis app '%s'; websocket is not ready\n", "Queued '%s' message for Stasis app '%s'; websocket is not ready\n",
msg_type, msg_type,
msg_application); msg_application);
} else { } else {
/* We are ready to publish the message */ /* We are ready to publish the message */
ast_ari_websocket_session_write(session->ws_session, 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, ...@@ -426,13 +426,18 @@ static int event_session_alloc(struct ast_tcptls_session_instance *ser,
return 0; 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) int ast_ari_websocket_events_event_websocket_init(void)
{ {
/* Try to instantiate the registry */ /* Try to instantiate the registry */
event_session_registry = ao2_container_alloc(EVENT_SESSION_NUM_BUCKETS, event_session_registry = ao2_container_alloc(EVENT_SESSION_NUM_BUCKETS,
event_session_hash, event_session_hash,
event_session_compare); event_session_compare);
if (!event_session_registry) { if (!event_session_registry) {
/* This is bad, bad. */ /* This is bad, bad. */
ast_log(LOG_WARNING, ast_log(LOG_WARNING,
......
...@@ -57,6 +57,13 @@ struct ast_ari_events_event_websocket_args { ...@@ -57,6 +57,13 @@ struct ast_ari_events_event_websocket_args {
*/ */
int ast_ari_websocket_events_event_websocket_init(void); 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. * \brief WebSocket connection for events.
* *
......
...@@ -462,6 +462,7 @@ static int unload_module(void) ...@@ -462,6 +462,7 @@ static int unload_module(void)
ast_ari_remove_handler(&events); ast_ari_remove_handler(&events);
ao2_cleanup(events.ws_server); ao2_cleanup(events.ws_server);
events.ws_server = NULL; events.ws_server = NULL;
ast_ari_websocket_events_event_websocket_dtor();
stasis_app_unref(); stasis_app_unref();
return 0; return 0;
} }
......
...@@ -102,6 +102,17 @@ void ast_ari_{{c_name}}_{{c_nickname}}(struct ast_variable *headers, struct ast_ ...@@ -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); 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}} * \brief {{summary}}
{{#notes}} {{#notes}}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment