Here some research is necessary. What I did e.g. was to google for:

is fgetc_unlocked safe?

and got a bunch of answers, til I got to https://www.gnu.org/software/libc/manual/html_node/Character-Input.html which in turns links to "POSIX Safety Concepts" i.e. https://www.gnu.org/software/libc/manual/html_node/POSIX-Safety-Concepts.html. That document sure doesn't mince words:

"MT-Unsafe, AS-Unsafe, AC-Unsafe functions are not safe to call within the safety contexts described above. Calling them within such contexts invokes undefined behavior."

So... the *_unlocked functions are not safe. They may be, however, wrapped in trusted functions (that issue the appropriate locking).


Andrei

On 02/07/2017 03:19 PM, Jakub Łabaj via phobos wrote:
Ouch, yes, I meant fgetc_unlocked.

Thank you for the help! As a solution I'm going to make a PR with the
mentioned changes, i.e. copy the approach of writef and apply @trusted
to LockingTextReader - I think I can do this, because its behaviour
ensures that functions FGETC, FLOCK, FUNLOCK are invoked in a safe manner.

On Tuesday, 7 February 2017 at 20:04:51 UTC, Andrei Alexandrescu wrote:
On 2/7/17 2:07 PM, Jakub Łabaj via phobos wrote:
I see it like this:
- flockfile - can be @trusted, because no matter when we call it with
correct argument, it won't do anything unsafe

affirmative

- funlockfile - if called by not owning thread, the behaviour is
undefined - so potentially may do something unsafe (I don't know what
> happens if called on not locked file, probably is ignored)

affirmative - in C "undefined" implies "unsafe"

fgetc - when not guarded by lock it is not thread safe, shouldn't be
@trusted

I think you mean fgetc_unlocked? fgetc issues its own locking and
unlocking.


Andrei


_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to