From ef17574193a38af9df175c9f5bbe101a69d889a4 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 1 Apr 2011 19:46:48 -0500 Subject: [PATCH] do this slightly safer so we don't have the mutex locked when we exec the app --- src/switch_channel.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/switch_channel.c b/src/switch_channel.c index 19eb92ad8d..2dd7d987da 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -2760,33 +2760,35 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_ring_ready_value(switch_c SWITCH_DECLARE(switch_status_t) switch_channel_execute_on(switch_channel_t *channel, const char *variable_prefix) { switch_event_header_t *hi; + switch_event_t *event; int x = 0; - - if ((hi = switch_channel_variable_first(channel))) { - for (; hi; hi = hi->next) { - char *var = hi->name; - char *val = hi->value; - char *app; - - if (!strncasecmp(var, variable_prefix, strlen(variable_prefix))) { - char *arg = NULL; - x++; - app = switch_core_session_strdup(channel->session, val); + switch_channel_get_variables(channel, &event); + + for (hi = event->headers; hi; hi = hi->next) { + char *var = hi->name; + char *val = hi->value; + char *app; + + if (!strncasecmp(var, variable_prefix, strlen(variable_prefix))) { + char *arg = NULL; + x++; + + app = switch_core_session_strdup(channel->session, val); - if (strstr(app, "::")) { - switch_core_session_execute_application_async(channel->session, app, arg); - } else { - if ((arg = strchr(app, ' '))) { - *arg++ = '\0'; - } - - switch_core_session_execute_application(channel->session, app, arg); + if (strstr(app, "::")) { + switch_core_session_execute_application_async(channel->session, app, arg); + } else { + if ((arg = strchr(app, ' '))) { + *arg++ = '\0'; } + + switch_core_session_execute_application(channel->session, app, arg); } } - switch_channel_variable_last(channel); } + + switch_event_destroy(&event); return x ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE; }