From aea73d4677a24b5af2dbf248ceb993307247f5f6 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 8 Dec 2009 01:20:22 +0000 Subject: [PATCH] fix caller_profile race in hangup that may cause some missing cdr data in certian cases git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15839 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_channel.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/switch_channel.c b/src/switch_channel.c index ba5be9a0a2..d6357973d1 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -506,7 +506,7 @@ SWITCH_DECLARE(const char *) switch_channel_get_variable(switch_channel_t *chann switch_mutex_lock(channel->profile_mutex); if (!channel->variables || !(v = switch_event_get_header(channel->variables, varname))) { - switch_caller_profile_t *cp = switch_channel_get_caller_profile(channel); + switch_caller_profile_t *cp = channel->caller_profile; if (cp) { if (!strncmp(varname, "aleg_", 5)) { @@ -1407,7 +1407,7 @@ SWITCH_DECLARE(void) switch_channel_event_set_basic_data(switch_channel_t *chann switch_mutex_lock(channel->profile_mutex); - if ((caller_profile = switch_channel_get_caller_profile(channel))) { + if ((caller_profile = channel->caller_profile)) { originator_caller_profile = caller_profile->originator_caller_profile; originatee_caller_profile = caller_profile->originatee_caller_profile; } @@ -2632,13 +2632,15 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * char dtstr[SWITCH_DTMF_LOG_LEN+1] = ""; int x = 0; + switch_mutex_lock(channel->profile_mutex); + if (switch_channel_test_flag(channel, CF_TIMESTAMP_SET)) { return SWITCH_STATUS_FALSE; } switch_channel_set_flag(channel, CF_TIMESTAMP_SET); - if (!(caller_profile = switch_channel_get_caller_profile(channel)) || !channel->variables) { + if (!(caller_profile = channel->caller_profile) || !channel->variables) { return SWITCH_STATUS_FALSE; } @@ -2844,6 +2846,8 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, legbillusec); switch_channel_set_variable(channel, "flow_billusec", tmp); + switch_mutex_unlock(channel->profile_mutex); + return status; }