Using PTHREAD_PRIO_INHERIT causes panic in kern_umtx.c

David Xu davidxu at freebsd.org
Tue Mar 10 00:11:37 PDT 2009


Justin Teller wrote:
> On Mon, Mar 9, 2009 at 12:02 PM, Justin Teller <justin.teller at gmail.com>wrote:
> 
>> When I compile and run the attached program, it panics my system, (FreeBSD
>> CURRENT as of 2-20-09) with the following message:
>>
>> panic: Assertion pi != NULL failed at /usr/src/sys/kern/kern_umtx: 1464
>>
>> With the backtrace being:
>> Tracing pid 1079 tid 100045 td 0xffffff00037c8000
>> kdb_enter() at kdb_enter+0x40
>> panic() at panic+0x1ec
>> umtx_pi_adjust() at umtx_pi_adjust+0xfc8
>> umtx_pi_adjust() at umtx_pi_adjust+0x19bd
>> _umtx_unlock() at _umtx_unlock+0x2c41
>> _umtx_op() at _umtx_op+0x22
>> syscall() at syscall+0x1f4
>> Xfast_syscall() at Xfast_syscall+0xaa
>> --- syscall (454, FreeBSD ELF64, _umtx_op), rip = 0x4056ac, rsp =
>> 0x7fffffbfef38, rbp = 0x80060b150 ---
>>
>> This problem only shows up when I use PTHREAD_PRIO_INHERIT -- if I change
>> the line for pthread_mutexattr_setprotocol to PTHREAD_PRIO_NONE, then it
>> works fine.  I've been trying to trace thru the code to figure out where
>> uq_pi_blocked should be setup, but I'm not too familiar with the code so I
>> haven't found where the problem originates.  How can I get
>> PTHREAD_PRIO_INHERIT to work?  And even if the change is in user-space, it
>> probably shouldn't be this easy to panic the kernel :-)
>>
>> -Justin
>>

There is a bug about NULL pointer, please try the patch, it also
fixes a possible wake-up race.

http://people.freebsd.org/%7Edavidxu/patch/kern_umtx_prio.patch


David Xu



More information about the freebsd-current mailing list