Linux-man Archive on lore.kernel.org
 help / color / Atom feed
* Re: POSIX writer locks can't be recursive
       [not found] <CAP01T764kz5T+m+8sV0o30enBL1TagF7RQSjU0XcVJ0PvL0PTg@mail.gmail.com>
@ 2020-06-26  8:54 ` Michael Kerrisk (man-pages)
  2020-07-15 19:50   ` Michael Kerrisk (man-pages)
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Kerrisk (man-pages) @ 2020-06-26  8:54 UTC (permalink / raw)
  To: Kumar Kartikeya Dwivedi; +Cc: mtk.manpages, Carlos O'Donell, linux-man

Hi Carlos,

Could you comment here, as this was your text in pthread_rwlockattr_setkind_np(3)?

On 6/25/20 2:32 PM, Kumar Kartikeya Dwivedi wrote:
> Hi,
> In pthread_rwlockattr_setkind_np(3), the explanation for
> PTHREAD_RWLOCK_PREFER_WRITER_NP reads:
> 
>> This is ignored by glibc because the POSIX requirement to support
>> recursive writer locks would cause this option to create trivial
>> deadlocks;
> 
> I think this should be "reader locks" instead, since it is
> undefined[1] for a thread holding a write lock to call
> pthread_rwlock_wrlock(3) again (glibc returns EDEADLK, musl simply
> deadlocks). There's no such requirement in POSIX either. Please let me
> know if I'm missing something.
> 
> [1]: https://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_wrlock.html

Cheers,

Michael

-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: POSIX writer locks can't be recursive
  2020-06-26  8:54 ` POSIX writer locks can't be recursive Michael Kerrisk (man-pages)
@ 2020-07-15 19:50   ` Michael Kerrisk (man-pages)
  2020-07-16 19:50     ` [PATCH] pthread_rwlockattr_setkind_np.3: PTHREAD_RWLOCK_PREFER_WRITER_NP Carlos O'Donell
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Kerrisk (man-pages) @ 2020-07-15 19:50 UTC (permalink / raw)
  To: Kumar Kartikeya Dwivedi; +Cc: Carlos O'Donell, linux-man

Hi Carlos,

Ping!

Thanks,

Michael

On Fri, 26 Jun 2020 at 10:54, Michael Kerrisk (man-pages)
<mtk.manpages@gmail.com> wrote:
>
> Hi Carlos,
>
> Could you comment here, as this was your text in pthread_rwlockattr_setkind_np(3)?
>
> On 6/25/20 2:32 PM, Kumar Kartikeya Dwivedi wrote:
> > Hi,
> > In pthread_rwlockattr_setkind_np(3), the explanation for
> > PTHREAD_RWLOCK_PREFER_WRITER_NP reads:
> >
> >> This is ignored by glibc because the POSIX requirement to support
> >> recursive writer locks would cause this option to create trivial
> >> deadlocks;
> >
> > I think this should be "reader locks" instead, since it is
> > undefined[1] for a thread holding a write lock to call
> > pthread_rwlock_wrlock(3) again (glibc returns EDEADLK, musl simply
> > deadlocks). There's no such requirement in POSIX either. Please let me
> > know if I'm missing something.
> >
> > [1]: https://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_wrlock.html
>
> Cheers,
>
> Michael
>
> --
> Michael Kerrisk
> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
> Linux/UNIX System Programming Training: http://man7.org/training/



-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] pthread_rwlockattr_setkind_np.3: PTHREAD_RWLOCK_PREFER_WRITER_NP
  2020-07-15 19:50   ` Michael Kerrisk (man-pages)
@ 2020-07-16 19:50     ` Carlos O'Donell
  2020-07-17  8:05       ` Michael Kerrisk (man-pages)
  0 siblings, 1 reply; 4+ messages in thread
From: Carlos O'Donell @ 2020-07-16 19:50 UTC (permalink / raw)
  To: mtk.manpages, Kumar Kartikeya Dwivedi; +Cc: linux-man

On 7/15/20 3:50 PM, Michael Kerrisk (man-pages) wrote:
> On Fri, 26 Jun 2020 at 10:54, Michael Kerrisk (man-pages)
> <mtk.manpages@gmail.com> wrote:
>>
>> Hi Carlos,
>>
>> Could you comment here, as this was your text in pthread_rwlockattr_setkind_np(3)?
>>
>> On 6/25/20 2:32 PM, Kumar Kartikeya Dwivedi wrote:
>>> Hi,
>>> In pthread_rwlockattr_setkind_np(3), the explanation for
>>> PTHREAD_RWLOCK_PREFER_WRITER_NP reads:
>>>
>>>> This is ignored by glibc because the POSIX requirement to support
>>>> recursive writer locks would cause this option to create trivial
>>>> deadlocks;
>>>
>>> I think this should be "reader locks" instead, since it is
>>> undefined[1] for a thread holding a write lock to call
>>> pthread_rwlock_wrlock(3) again (glibc returns EDEADLK, musl simply
>>> deadlocks). There's no such requirement in POSIX either. Please let me
>>> know if I'm missing something.
>>>
>>> [1]: https://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_wrlock.html

I agree with Kumar, and the comment I provided in commit 0d255e74c0 lines up
with my intent and Kumar's requested correction (which is why it's always important
to comment things to provide intent for the implementation!).

8< --- 8< --- 8<
Clarify that it is recursive read locks on the read-write lock that
make it difficult to implement PTHREAD_RWLOCK_PREFER_WRITER_NP.

Update the libc-alpha URL and provide the URL to the POSIX wording
that is quoted in the comment.

Signed-off-by: Carlos O'Donell <carlos@redhat.com>

diff --git a/man3/pthread_rwlockattr_setkind_np.3 b/man3/pthread_rwlockattr_setkind_np.3
index b381972dc..a91c43552 100644
--- a/man3/pthread_rwlockattr_setkind_np.3
+++ b/man3/pthread_rwlockattr_setkind_np.3
@@ -80,7 +80,7 @@ starved.
 This is intended as the write lock analog of
 .BR PTHREAD_RWLOCK_PREFER_READER_NP .
 This is ignored by glibc because the POSIX requirement to support
-recursive writer locks would cause this option to create trivial
+recursive read locks would cause this option to create trivial
 deadlocks; instead use
 .B PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
 which ensures the application developer will not take recursive
@@ -102,7 +102,8 @@ read locks thus avoiding deadlocks.
 .\" the writers to acquire and release the lock, and the writers will be
 .\" suspended waiting for every existing read lock to be released.
 .\" ---
-.\" http://sources.redhat.com/ml/libc-alpha/2000-01/msg00055.html
+.\" https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html
+.\" https://sourceware.org/legacy-ml/libc-alpha/2000-01/msg00055.html
 .\" https://sourceware.org/bugzilla/show_bug.cgi?id=7057
 .TP
 .B PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
-- 
2.26.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] pthread_rwlockattr_setkind_np.3: PTHREAD_RWLOCK_PREFER_WRITER_NP
  2020-07-16 19:50     ` [PATCH] pthread_rwlockattr_setkind_np.3: PTHREAD_RWLOCK_PREFER_WRITER_NP Carlos O'Donell
@ 2020-07-17  8:05       ` Michael Kerrisk (man-pages)
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Kerrisk (man-pages) @ 2020-07-17  8:05 UTC (permalink / raw)
  To: Carlos O'Donell, Kumar Kartikeya Dwivedi; +Cc: mtk.manpages, linux-man

Hello Carlos, Kumas,

On 7/16/20 9:50 PM, Carlos O'Donell wrote:
> On 7/15/20 3:50 PM, Michael Kerrisk (man-pages) wrote:
>> On Fri, 26 Jun 2020 at 10:54, Michael Kerrisk (man-pages)
>> <mtk.manpages@gmail.com> wrote:
>>>
>>> Hi Carlos,
>>>
>>> Could you comment here, as this was your text in pthread_rwlockattr_setkind_np(3)?
>>>
>>> On 6/25/20 2:32 PM, Kumar Kartikeya Dwivedi wrote:
>>>> Hi,
>>>> In pthread_rwlockattr_setkind_np(3), the explanation for
>>>> PTHREAD_RWLOCK_PREFER_WRITER_NP reads:
>>>>
>>>>> This is ignored by glibc because the POSIX requirement to support
>>>>> recursive writer locks would cause this option to create trivial
>>>>> deadlocks;
>>>>
>>>> I think this should be "reader locks" instead, since it is
>>>> undefined[1] for a thread holding a write lock to call
>>>> pthread_rwlock_wrlock(3) again (glibc returns EDEADLK, musl simply
>>>> deadlocks). There's no such requirement in POSIX either. Please let me
>>>> know if I'm missing something.
>>>>
>>>> [1]: https://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_wrlock.html
> 
> I agree with Kumar, and the comment I provided in commit 0d255e74c0 lines up
> with my intent and Kumar's requested correction (which is why it's always important
> to comment things to provide intent for the implementation!).
> 
> 8< --- 8< --- 8<
> Clarify that it is recursive read locks on the read-write lock that
> make it difficult to implement PTHREAD_RWLOCK_PREFER_WRITER_NP.
> 
> Update the libc-alpha URL and provide the URL to the POSIX wording
> that is quoted in the comment.
> 
> Signed-off-by: Carlos O'Donell <carlos@redhat.com>

Thanks for the patch, Carlos. Applied.

Thanks for the report, Kumar!

Cheers,

Michael
> 
> diff --git a/man3/pthread_rwlockattr_setkind_np.3 b/man3/pthread_rwlockattr_setkind_np.3
> index b381972dc..a91c43552 100644
> --- a/man3/pthread_rwlockattr_setkind_np.3
> +++ b/man3/pthread_rwlockattr_setkind_np.3
> @@ -80,7 +80,7 @@ starved.
>  This is intended as the write lock analog of
>  .BR PTHREAD_RWLOCK_PREFER_READER_NP .
>  This is ignored by glibc because the POSIX requirement to support
> -recursive writer locks would cause this option to create trivial
> +recursive read locks would cause this option to create trivial
>  deadlocks; instead use
>  .B PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
>  which ensures the application developer will not take recursive
> @@ -102,7 +102,8 @@ read locks thus avoiding deadlocks.
>  .\" the writers to acquire and release the lock, and the writers will be
>  .\" suspended waiting for every existing read lock to be released.
>  .\" ---
> -.\" http://sources.redhat.com/ml/libc-alpha/2000-01/msg00055.html
> +.\" https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html
> +.\" https://sourceware.org/legacy-ml/libc-alpha/2000-01/msg00055.html
>  .\" https://sourceware.org/bugzilla/show_bug.cgi?id=7057
>  .TP
>  .B PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
> 


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CAP01T764kz5T+m+8sV0o30enBL1TagF7RQSjU0XcVJ0PvL0PTg@mail.gmail.com>
2020-06-26  8:54 ` POSIX writer locks can't be recursive Michael Kerrisk (man-pages)
2020-07-15 19:50   ` Michael Kerrisk (man-pages)
2020-07-16 19:50     ` [PATCH] pthread_rwlockattr_setkind_np.3: PTHREAD_RWLOCK_PREFER_WRITER_NP Carlos O'Donell
2020-07-17  8:05       ` Michael Kerrisk (man-pages)

Linux-man Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-man/0 linux-man/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-man linux-man/ https://lore.kernel.org/linux-man \
		linux-man@vger.kernel.org
	public-inbox-index linux-man

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-man


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git