Bug 595815 - pthread_spin_lock() blocks instead of returning EDEADLK
Summary: pthread_spin_lock() blocks instead of returning EDEADLK
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Red Hat Enterprise Linux 5
Classification: Red Hat
Component: glibc
Version: 5.5
Hardware: All
OS: Linux
low
medium
Target Milestone: rc
: ---
Assignee: Andreas Schwab
QA Contact: qe-baseos-tools-bugs
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2010-05-25 16:57 UTC by Geoff Levner
Modified: 2016-11-24 16:10 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2010-05-26 13:17:08 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)
test program illustrating the bug (709 bytes, text/x-csrc)
2010-05-25 16:57 UTC, Geoff Levner
no flags Details


Links
System ID Private Priority Status Summary Last Updated
CentOS 4331 0 None None None Never

Description Geoff Levner 2010-05-25 16:57:40 UTC
Created attachment 416453 [details]
test program illustrating the bug

According to the man page, pthread_spin_lock() should fail and return EDEADLK if the given lock is already held by the calling thread. In fact it blocks.

The bug can be reproduced using the attached test program.

Comment 1 Andreas Schwab 2010-05-26 13:17:08 UTC
http://opengroup.org/onlinepubs/9699919799/functions/pthread_spin_lock.html

The results are undefined if the calling thread holds the lock at the time the call is made.

Comment 2 Charlie Brady 2010-06-01 21:57:47 UTC
(In reply to comment #1)

> http://opengroup.org/onlinepubs/9699919799/functions/pthread_spin_lock.html
> 
> The results are undefined if the calling thread holds the lock at the time the
> call is made.    

In that case, the man page is incorrect (according to Geoff's assertion - I haven't checked), and should be updated. Bug should be re-opened.

Comment 3 Geoff Levner 2010-06-02 08:46:32 UTC
(In reply to comment #2)

The man page is ambiguous. It does indeed say that the results are undefined if the calling thread holds the lock at the time the call is made. But it also says, in the section on return codes, that pthread_spin_lock() may return EDEADLK if that is the case (which would be quite useful).


Note You need to log in before you can comment on or make changes to this bug.