I've already corrected myslef (but somehow my second email didn't make it
to the bugtracker), so I'll repeat it here:

Actually getenv isn't thread safe but rakudo shouldn't crash anyway. Here
is another example:

$ cat foo.c
#include <stdio.h>

int foo(void) { return 0; }
$ gcc -fPIC -shared foo.c -o foo.so
$ perl6 -e 'use NativeCall; sub foo is native("./foo.so") returns int32 { *
}; await start { foo } xx 25'
$ perl6 -e 'use NativeCall; sub foo is native("./foo.so") returns int32 { *
}; await start { foo } xx 25'
Cannot invoke this object (REPR: Null)
  in block <unit> at -e line 1

and here is another:

01:03 < Rotwang> m: use NativeCall; sub puts(Str) is native returns int32 {
* }; await start { puts("dupa") } xx 15
01:03 <+camelia> rakudo-moar e95c62: OUTPUT«(signal SEGV)»

besides even if the function is not thread safe, IMO rakudo shouldn't
coredump.

2016-01-04 15:58 GMT+00:00 Brandon Allbery via RT <
perl6-bugs-follo...@perl.org>:

> On Mon, Jan 4, 2016 at 10:51 AM, Elizabeth Mattijsen <l...@dijkmat.nl>
> wrote:
>
> > > getenv should be threadsafe according to:
> > >
> >
> http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_01
> >
> >
> >
> > http://pubs.opengroup.org/onlinepubs/9699919799/functions/getenv.html
> >
> > seems to claim otherwise?
> >
> > "The getenv() function is inherently not thread-safe because it returns a
> > value pointing to static data.”
> >
> >
> From the first link claiming that getenv() is thread safe... how are you
> reading that? I see:
>
>     "the following functions need not be thread-safe: (...) getenv()"
>
> Also note below the function list:
>
>     Since multi-threaded applications are not allowed to use the
> *environ* variable
> to access or modify any environment variable while any other thread is
> concurrently modifying any environment variable, any function dependent on
> any environment variable is not thread-safe if another thread is modifying
> the environment
>
> (plus a link to the environment variables documentation which explicitly
> relates getenv() to `environ`)
>
> --
> brandon s allbery kf8nh                               sine nomine
> associates
> allber...@gmail.com
> ballb...@sinenomine.net
> unix, openafs, kerberos, infrastructure, xmonad
> http://sinenomine.net
>
>

Reply via email to