diff --git a/include/asterisk/stasis_app.h b/include/asterisk/stasis_app.h index b11670ac5d..749f8ed694 100644 --- a/include/asterisk/stasis_app.h +++ b/include/asterisk/stasis_app.h @@ -140,6 +140,8 @@ enum stasis_app_subscribe_res { * after adding the subscription. * * \return \ref stasis_app_subscribe_res return code. + * + * \note Do not hold any channel locks if subscribing to a channel. */ enum stasis_app_subscribe_res stasis_app_subscribe(const char *app_name, const char **event_source_uris, int event_sources_count, diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c index a00b295329..10d190534e 100644 --- a/res/ari/resource_channels.c +++ b/res/ari/resource_channels.c @@ -642,6 +642,9 @@ void ast_ari_originate(struct ast_variable *headers, return; } + snapshot = ast_channel_snapshot_create(chan); + ast_channel_unlock(chan); + if (!ast_strlen_zero(args->app)) { /* channel: + channel ID + null terminator */ char uri[9 + strlen(ast_channel_uniqueid(chan))]; @@ -651,10 +654,7 @@ void ast_ari_originate(struct ast_variable *headers, stasis_app_subscribe(args->app, uris, 1, NULL); } - snapshot = ast_channel_snapshot_create(chan); ast_ari_response_ok(response, ast_channel_snapshot_to_json(snapshot)); - - ast_channel_unlock(chan); ast_channel_unref(chan); }