From ee21eee7e067573ad83bd0df492036094b4dbaca Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Thu, 3 Oct 2013 14:58:16 +0000 Subject: Cache string values of formats on ast_format_cap() to save processing. Channel snapshots have string representations of the channel's native formats. Prior to this change, the format strings were re-created on ever channel snapshot creation. Since channel native formats rarely change, this was very wasteful. Now, string representations of formats may optionally be stored on the ast_format_cap for cases where string representations may be requested frequently. When formats are altered, the string cache is marked as invalid. When strings are requested, the cache validity is checked. If the cache is valid, then the cached strings are copied. If the cache is invalid, then the string cache is rebuilt and copied, and the cache is marked as being valid again. Review: https://reviewboard.asterisk.org/r/2879 ........ Merged revisions 400356 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@400363 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_motif.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'channels/chan_motif.c') diff --git a/channels/chan_motif.c b/channels/chan_motif.c index e13c66c6f..1e7ee3cce 100644 --- a/channels/chan_motif.c +++ b/channels/chan_motif.c @@ -519,7 +519,7 @@ static void *jingle_endpoint_alloc(const char *cat) ast_string_field_set(endpoint, name, cat); - endpoint->cap = ast_format_cap_alloc_nolock(); + endpoint->cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_NOLOCK); endpoint->transport = JINGLE_TRANSPORT_ICE_UDP; return endpoint; @@ -741,9 +741,9 @@ static struct jingle_session *jingle_alloc(struct jingle_endpoint *endpoint, con session->connection = endpoint->connection; session->transport = endpoint->transport; - if (!(session->cap = ast_format_cap_alloc_nolock()) || - !(session->jointcap = ast_format_cap_alloc_nolock()) || - !(session->peercap = ast_format_cap_alloc_nolock()) || + if (!(session->cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_NOLOCK)) || + !(session->jointcap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_NOLOCK)) || + !(session->peercap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_NOLOCK)) || !session->callid) { ao2_ref(session, -1); return NULL; @@ -2707,7 +2707,7 @@ static int custom_transport_handler(const struct aco_option *opt, struct ast_var */ static int load_module(void) { - if (!(jingle_tech.capabilities = ast_format_cap_alloc())) { + if (!(jingle_tech.capabilities = ast_format_cap_alloc(0))) { return AST_MODULE_LOAD_DECLINE; } -- cgit v1.2.3