[asterisk-dev] strange segfault in bridging.c
Mark Michelson
mmichelson at digium.com
Wed Feb 10 00:24:47 CST 2010
Klaus Darilion wrote:
> SVN-branch-1.6.2-r245626M (todays SVN)
>
> Hi!
>
> I just play around with the bridging framework and as soon as I add
> some log statements Asterisk segfaults. Here is the backtrace:
>
> #0 0x080874d6 in find_bridge_channel (bridge=0x0, chan=0x92dc590) at
> bridging.c:208
> 208 AST_LIST_TRAVERSE(&bridge->channels, bridge_channel,
> entry) {
> (gdb) bt
> #0 0x080874d6 in find_bridge_channel (bridge=0x0, chan=0x92dc590) at
> bridging.c:208
> #1 0x08087730 in ast_bridge_handle_trip (bridge=0x0,
> bridge_channel=0x0, chan=0x92dc590, outfd=-1) at bridging.c:280
> #2 0xb757c6d8 in multiplexed_thread_function (data=0x92f15a0) at
> bridge_multiplexed.c:236
> #3 0x08159ab9 in dummy_start (data=0xb7845e88) at utils.c:968
> #4 0xb7b70f3b in start_thread () from /lib/libpthread.so.0
> #5 0xb7d8bbee in clone () from /lib/libc.so.6
>
>
> I have attached the diff of my modifications. It is just logging of
> pointers, so I am pretty sure my log statements are fine.
>
> Maybe it be that there is a race condition between threads which only
> happens if on thread is delayed by logging?
>
> regards
> Klaus
Your changes look pretty innocuous to me. It seems weird that the first
argument to ast_bridge_handle_trip would be NULL since we just checked
to be sure that it was non-NULL in multiplexed_thread_function. Do I
understand you correctly that the crashes only occur when your debug
lines have been added?
Valgrind may help with this, although I have a feeling it's just going
to tell you that address 0x0 is not stacked, heaped, or recently freed.
Something else that may help is to place debugging statements at places
where a channel's bridge can be set NULL to see if that is what is
happening in a separate thread. The bridge_channel->chan->bridge = NULL
statement in bridge_channel_join in bridging.c seems a bit suspicious to
me, though I admit that my knowledge of the bridging API is tenuous.
Mark Michelson
More information about the asterisk-dev
mailing list