[Asterisk-Users] Asterisk consuming 100% CPU - CDR loop
Cees de Groot
cg at cdegroot.com
Tue Dec 28 08:54:12 MST 2004
Hi,
I had Asterisk threads consuming 100% CPU at times since last week. Of
course, last week an extra card was installed (we had a 1PRI, a 4PRI was
added) so search concentrated on that, but to no avail. Today, I installed
DDD on the machine and quickly found out that it was looping because
cdr->next->next == cdr in ast_cdr_setapp().
I patched this up with some simple code in ast_cdr_append(), but that's
just masking the bug.
The only place were cdr->next is set is in ast_cdr_append(), and this (as
far as I can tell) code is called from ForkCDR() and the Zap channel
transfer logic (also from SIP, but SIP is not involved here). I do a
ForkCDR() somewhere before Dial() so I think my dialplan hits both (people
dial in through Zap and out again through Zap). And the trouble started
when I added ForkCDR() to the dialplan.
I suspect the code in chan_zap.c:attempt_transfer() is flawed somewhere
w.r.t. blindingly glueing CDR's together, but I'm not completely sure:
first, I am not even sure whether I hit this function, second, it *seems*
to happen just now and then which would indicate a race condition. The
system is a production system, all the calls are essentially the same:
people call in, go through some IVR, enter a number to dial out, the
system does a Dial().
Anyone else had this problem?
More information about the asterisk-users
mailing list