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 > >