Author: jrose Date: Thu Aug 21 16:00:31 2014 New Revision: 421777 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=421777 Log: res_musiconhold: Fix reference leaks caused when reloading with REF_DEBUG set
Due to a faulty function for debugging reference decrementing, it was possible to reduce the refcount on the wrong object if two moh classes of the same name were in the moh class container. (closes issue ASTERISK-22252) Reported by: Walter Doekes Patches: 18_moh_debug_ref_patch.diff Uploaded by Jonathan Rose (license 6182) ........ Merged revisions 398937 from http://svn.asterisk.org/svn/asterisk/branches/1.8 Modified: branches/11/ (props changed) branches/11/res/res_musiconhold.c Propchange: branches/11/ ------------------------------------------------------------------------------ Binary property 'branch-1.8-merged' - no diff available. Modified: branches/11/res/res_musiconhold.c URL: http://svnview.digium.com/svn/asterisk/branches/11/res/res_musiconhold.c?view=diff&rev=421777&r1=421776&r2=421777 ============================================================================== --- branches/11/res/res_musiconhold.c (original) +++ branches/11/res/res_musiconhold.c Thu Aug 21 16:00:31 2014 @@ -234,8 +234,9 @@ #define mohclass_unref(class,string) _mohclass_unref(class, string, __FILE__,__LINE__,__PRETTY_FUNCTION__) static struct mohclass *_mohclass_unref(struct mohclass *class, const char *tag, const char *file, int line, const char *funcname) { - struct mohclass *dup; - if ((dup = ao2_find(mohclasses, class, OBJ_POINTER))) { + struct mohclass *dup = ao2_callback(mohclasses, OBJ_POINTER, ao2_match_by_addr, class); + + if (dup) { if (__ao2_ref_debug(dup, -1, (char *) tag, (char *) file, line, funcname) == 2) { FILE *ref = fopen("/tmp/refs", "a"); if (ref) { @@ -248,7 +249,7 @@ ao2_ref(class, -1); } } else { - ao2_t_ref(class, -1, (char *) tag); + __ao2_ref_debug(class, -1, (char *) tag, (char *) file, line, funcname); } return NULL; } -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits