[asterisk-bugs] [Asterisk 0015915]: crash when calling ao2_unlock inside pthread_timer_disable_continuous

Asterisk Bug Tracker noreply at bugs.digium.com
Fri Dec 4 00:04:15 CST 2009


A NOTE has been added to this issue. 
====================================================================== 
https://issues.asterisk.org/view.php?id=15915 
====================================================================== 
Reported By:                keiron
Assigned To:                
====================================================================== 
Project:                    Asterisk
Issue ID:                   15915
Category:                   Resources/res_timing_pthread
Reproducibility:            random
Severity:                   crash
Priority:                   normal
Status:                     acknowledged
Asterisk Version:           Older 1.6.1 
JIRA:                       SWP-307 
Regression:                 No 
Reviewboard Link:            
SVN Branch (only for SVN checkouts, not tarball releases): N/A 
SVN Revision (number only!):  
Request Review:              
====================================================================== 
Date Submitted:             2009-09-18 01:03 CDT
Last Modified:              2009-12-04 00:04 CST
====================================================================== 
Summary:                    crash when calling ao2_unlock inside
pthread_timer_disable_continuous
Description: 
When under heavy load we have experienced random crashes (6 times in a day)
at the same point in the code. The load is with about 200 channels, 70
users and making a lot of calls. It was very stable until we started
reaching a certain level of usage.
====================================================================== 

---------------------------------------------------------------------- 
 (0114711) paul-tg (reporter) - 2009-12-04 00:04
 https://issues.asterisk.org/view.php?id=15915#c114711 
---------------------------------------------------------------------- 
I've analysed the state of the pthread_timers structure in one of the core
files, and found no inconsistency.

Specifically, using the backtrace above I derived that the thread handle
passed in to pthread_timer_disable_continuous() was 1218, so the backtrace
*should have* looked like:

https://issues.asterisk.org/view.php?id=0 _ao2_unlock (user_data=0x80,
file=0x2aaabb0336e0
"res_timing_pthread.c",
    func=0x2aaabb033d20 "pthread_timer_disable_continuous", line=240,
    var=0x2aaabb0336f5 "timer") at astobj2.c:115
https://issues.asterisk.org/view.php?id=1 0x00002aaabb0309ce in
pthread_timer_disable_continuous (handle=1218)
    at res_timing_pthread.c:240
https://issues.asterisk.org/view.php?id=2 0x0000000000470edd in __ast_read
(chan=0xbd0eab0, dropaudio=0)
    at channel.c:2693

and find_timer() ought to have matched the following entry:

(gdb) print{struct pthread_timer}0x13013208
$105 = {pipe = {1218, 1219}, state = TIMER_STATE_IDLE, rate = 0, interval
= 0,
  tick_count = 0, pending_ticks = 0, start = {tv_sec = 0, tv_usec = 0},
  continuous = 0}

This however looks valid, so I still don't know why the comparison returns
low values with a single bit set (so far I've seen 0x01, 0x04, and 0x80)
instead of a valid memory address. 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2009-12-04 00:04 paul-tg        Note Added: 0114711                          
======================================================================




More information about the asterisk-bugs mailing list