----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviewboard.asterisk.org/r/3055/#review10378 -----------------------------------------------------------
/branches/1.8/main/pbx.c <https://reviewboard.asterisk.org/r/3055/#comment19775> This method is now really a very, very, very thin wrapper around pbx_substitute_variables_helper. The method signatures are actually identical (although the parameters have been reordered, presumably to protect the innocent). I'd remove the entire function and have pbx_extension_helper call pbx_substitute_variables_helper directly. /branches/1.8/main/pbx.c <https://reviewboard.asterisk.org/r/3055/#comment19774> You should actually check for e->data (or e_data) being NULL prior to this point, as you probably don't want to duplicate a NULL pointer on the stack. See finding later on... /branches/1.8/main/pbx.c <https://reviewboard.asterisk.org/r/3055/#comment19776> This can also be done earlier before duplicating e->data on the stack. /branches/1.8/main/pbx.c <https://reviewboard.asterisk.org/r/3055/#comment19773> Previously, e->data would be checked for NULL before doing variable substitution. I think we still would want do that here. That is, if e->data is NULL, we don't duplicate it on the stack - instead, we simply bypass the actuall setting of the variable. I'd structure it something like this: char *e_data = NULL; ... if (!ast_strlen_zero(e->data)) { *passdata = '\0'; } else { e_data = ast_strdupa(e->data); } ast_unlock_contexts(); if (!ast_strlen_zero(e_data)) { pbx_substitute_variables(...); } etc. - Matt Jordan On Dec. 10, 2013, 7:39 p.m., Scott Griepentrog wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviewboard.asterisk.org/r/3055/ > ----------------------------------------------------------- > > (Updated Dec. 10, 2013, 7:39 p.m.) > > > Review request for Asterisk Developers and Matt Jordan. > > > Bugs: AST-1179 and AST-1246 > https://issues.asterisk.org/jira/browse/AST-1179 > https://issues.asterisk.org/jira/browse/AST-1246 > > > Repository: Asterisk > > > Description > ------- > > During dialplan execution in pbx_extension_helper(), the contexts global read > lock is used prevent changes to the dialplan. This patch puts a copy of > exten->data on the stack so that can be referenced safely during variable > substitution (expression evaluation) even if another thread is reloading > dialplan and has deleted ast_exten. > > > Diffs > ----- > > /branches/1.8/main/pbx.c 403615 > > Diff: https://reviewboard.asterisk.org/r/3055/diff/ > > > Testing > ------- > > Testsuite test 'dialplan_stress' (https://reviewboard.asterisk.org/r/3056/) > created to isolate this problem and test this fix. > > > Thanks, > > Scott Griepentrog > >
-- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- asterisk-dev mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev
