[Xenomai] Deadlock in CANCEL_RESTORE with CONFIG_XENO_ASYNC_CANCEL during thread suspension

Matthias Schneider ma30002000 at yahoo.de
Wed Apr 16 20:34:51 CEST 2014


----- Original Message -----

> From: Philippe Gerum <rpm at xenomai.org>
> To: Matthias Schneider <ma30002000 at yahoo.de>; "xenomai at xenomai.org" <xenomai at xenomai.org>
> Cc: 
> Sent: Monday, April 7, 2014 11:59 AM
> Subject: Re: [Xenomai] Deadlock in CANCEL_RESTORE with CONFIG_XENO_ASYNC_CANCEL during thread suspension
> 
> On 04/06/2014 01:50 PM, Matthias Schneider wrote:
>>  Hi all,
>> 
>>  using xenomai-forge with mercury, when
>>  CONFIG_XENO_ASYNC_CANCEL is defined, CANCEL_RESTORE
>>  will include a call to backtrace_check(), which in turn
>>  will call backtrace_dump, which will take the
>>  mutex "__printlock".
>> 
>>  In case a thread gets suspended while holding that lock,
>>  the next call to CANCEL_RESTORE from whatever thread will
>>  cause a deadlock.
> 
> That's the price for using thread suspend/resume unsafe constructs, we 
> never know at which location we will be preempting threads.
> 
> 
>> 
>>  Is there any way of getting around that?
>> 
> 
> We could block the notification signal when holding this internal lock. 
> I'll have a look.
> 
> -- 
> Philippe.
> 

Would the enclosed patch be an acceptable solution to the problem? It seems to 
work quite well in my case.

Regards,
Matthias
-------------- next part --------------
A non-text attachment was scrubbed...
Name: backtrace_dump_block_signals.patch
Type: text/x-patch
Size: 1109 bytes
Desc: not available
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20140416/62286c16/attachment.bin>



More information about the Xenomai mailing list