linux-man.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Carlos O'Donell" <carlos-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Rich Felker <dalias-8zAoT0mYgF4@public.gmane.org>
Cc: Alexandre Oliva <aoliva-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Michael Kerrisk
	<mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Peng Haitao <penght-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>,
	"linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	GNU C Library
	<libc-alpha-9JcytcrH/bA+uJoB2kUjGw@public.gmane.org>
Subject: Re: Adding reentrancy information to safety notes?
Date: Mon, 05 Jan 2015 10:05:56 -0500	[thread overview]
Message-ID: <54AAA854.70507@redhat.com> (raw)
In-Reply-To: <20150101001905.GU4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>

On 12/31/2014 07:19 PM, Rich Felker wrote:
> On Tue, Dec 30, 2014 at 11:12:40PM -0500, Carlos O'Donell wrote:
>> That is not the definition of reentrancy that I had in mind.
> 
> Indeed. To me, "reentrancy" means the ability to enter the code again
> while one or more instances of the same function are already running
> in the same thread. In my view this doesn't necessarily include
> asynchronous reentrancy unless explicitly stated, and it doesn't have
> anything to do with the concept of reentrancy in the obsolete POSIX
> 2001 that was removed and replaced with "thread safety" in later
> editions of POSIX.
> 
>> [snip]
>>
>>> Or are these questions meaningless because this definition is not the
>>> one we want to use for Reentrancy?
>>  
>> We already use AS-safe to indicate that a function is safe to reenter
>> from a signal handler.
> 
> AS-safety means more than that. It means that it's safe to use the
> function from a signal handler no matter what function the signal
> handler interrupted, and that it's safe to call any standard function
> from a signal handler that interrupted the AS-safe function. Note that
> the latter part can be vacuously true if AS-safety is achieved by
> blocking signals for the duration of the function.
> 
>> We already use MT-safe to indicate that a function is safe to reenter
>> from another thread.
>>
>> The only definition of reentrancy I had in mind is that which is derived
>> from the original definition of single-threaded program reetrancy, with
>> the exclusion of signals.
> 
> This agrees with my definition.
> 
>> The reason I want to use this definition is to more formally describe
>> those functions which are safe to call from a user provided malloc.
>> A user provided malloc can be called from almost anywhere in glibc, it
>> interrupts core glibc code, it only synchronously interrupts core
>> glibc code (when malloc is called), and limiting a user provided malloc
>> to AS-safe functions would be punative (though that is what we'll be
>> doing in the initial documentation pass).
>>
>> Definition of reentrancy:
>> =========================
>> ~~~~
>> A function is reentrant if the one thread may safely call
>> the function before a previous call to the same function
>> by the same thread completes, but need not be safe if the
>> second or subsequent calls are made while handling a signal.
>> ~~~~
>> Safely implies no data loss.
>>
>> By definition all AS-safe functions are reetrant.
>>
>> A reetrant function may be AS-unsafe and MT-unsafe.
>>
>> A reetrant function may be AS-unsafe and MT-safe.
>>
>> A reetrant function may be AS-safe (makes it reetrant by definition) and MT-unsafe.
> 
> No, AS-safe does not imply reentrant. Consider a function that invokes
> a callback but blocks signals during its execution. It's vacuously
> AS-safe but instead of via a signal handler it can be re-entered via
> the callback, and whether such reentrancy is safe is a non-trivial
> question.

You are correct. Thank you for the contradicting example.

The correction should read:

"A reentrant function may be AS-safe and MT-unsafe."

Thus the safety note is entirely orthogonal to AS and MT safety.

Cheers,
Carlos.


--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2015-01-05 15:05 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-30 15:45 Adding reentrancy information to safety notes? Carlos O'Donell
     [not found] ` <54A2C8A6.9050100-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-12-30 19:53   ` Michael Kerrisk (man-pages)
2014-12-30 20:08     ` Carlos O'Donell
     [not found]       ` <54A30624.7070207-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-12-30 20:35         ` Michael Kerrisk (man-pages)
2014-12-30 22:55   ` Alexandre Oliva
     [not found]     ` <ork318eoj4.fsf-o1YuAO9g/txBDLzU/O5InQ@public.gmane.org>
2014-12-30 23:05       ` Rich Felker
     [not found]         ` <20141230230529.GT4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2014-12-31  1:43           ` Alexandre Oliva
2014-12-31  4:12             ` Carlos O'Donell
     [not found]               ` <54A377B8.60802-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-12-31  9:31                 ` Alexandre Oliva
     [not found]                   ` <ortx0cdv3c.fsf-o1YuAO9g/txBDLzU/O5InQ@public.gmane.org>
2014-12-31 15:26                     ` Carlos O'Donell
     [not found]                       ` <54A41595.4010007-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-01-01  7:05                         ` Alexandre Oliva
2015-01-05 14:25                           ` Carlos O'Donell
2015-01-01  0:19                 ` Rich Felker
     [not found]                   ` <20150101001905.GU4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2015-01-05 15:05                     ` Carlos O'Donell [this message]
2014-12-31  9:38               ` Alexandre Oliva
     [not found]                 ` <orppb0dur7.fsf-o1YuAO9g/txBDLzU/O5InQ@public.gmane.org>
2014-12-31 16:07                   ` Carlos O'Donell
     [not found]                     ` <54A41F36.5010800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-01-01  7:11                       ` Alexandre Oliva
2015-01-05 15:26                         ` Carlos O'Donell
2015-01-05 23:21                           ` Alexandre Oliva
2015-01-07  9:52                       ` Michael Kerrisk (man-pages)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54AAA854.70507@redhat.com \
    --to=carlos-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
    --cc=aoliva-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=dalias-8zAoT0mYgF4@public.gmane.org \
    --cc=libc-alpha-9JcytcrH/bA+uJoB2kUjGw@public.gmane.org \
    --cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=penght-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).