[Asterisk-Dev] Signal timing can bring down Asterisk
    Hans Petter Selasky 
    hselasky at c2i.net
       
    Mon Aug 15 12:46:08 MST 2005
    
    
  
Hi,
I'm writing a channel driver for asterisk and I have hit some problems.
1)
I want to have my channel driver under a BSD license, but I see no
ASTERISK_BSD_KEY. Must all code be under GPL or is BSD also allowed?
2)
What happens if two different threads call "ast_hangup()" at the same time on 
the same "ast_channel" ?
For example a telephony call has two parties. What happens if asterisk 
processes the disconnect signals from the two parties at exactly the same 
time. I suspect that the last thread calling "ast_hangup()" is going to 
access freed memory.
So all the functions that can be called from the channel drivers taking 
"struct ast_channel *" as an argument, needs some kind of check to verify 
that this pointer is still valid before proceeding. So to do that you need to 
hold "ast_channel->lock", but hence this structure can be freed, the pointer 
to this lock must be passes as an argument from the caller in addition to the 
ast_channel pointer. Then only the mutex must me static.
So if the timing of the signals are wrong Asterisk will crash, or am I wrong?
Any comments ?
--HPS
    
    
More information about the asterisk-dev
mailing list