Fix a crash in res_musiconhold when using cached realtime moh.
authorMark Michelson <mmichelson@digium.com>
Thu, 9 Apr 2009 17:30:39 +0000 (17:30 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 9 Apr 2009 17:30:39 +0000 (17:30 +0000)
commit0058b02563a99ec007a108bc1f7ededed7bf75dd
treeed6974e2d7e5cd1deef38e38f0dd17b1213ad8a8
parent7304ac444e3ad9bd70a64f886121c30c5971946b
Fix a crash in res_musiconhold when using cached realtime moh.

The moh_register function links an mohclass and then immediately
unrefs the class since the container now has a reference. The problem
with using realtime music on hold is that the class is allocated,
registered, and started in one fell swoop. The refcounting logic
resulted in the count being off by one. The same problem did not
happen when using a static config because the allocation and registration
of an mohclass is a separate operation from starting moh. This also did
not affect non-cached realtime moh because the classes are not registered
at all.

I also have modified res_musiconhold to use the _t_ variants of the ao2_
functions so that more info can be gleaned when attempting to trace the
refcounts. I found this to be incredibly helpful for debugging this issue
and there's no good reason to remove it.

(closes issue #14661)
Reported by: sum

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@187421 65c4cc65-6c06-0410-ace0-fbb531ad65f3
res/res_musiconhold.c