This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add thread safety to some environment accesses
authorKarl Williamson <khw@cpan.org>
Fri, 6 Mar 2020 21:18:45 +0000 (14:18 -0700)
committerKarl Williamson <khw@cpan.org>
Wed, 11 Mar 2020 15:52:12 +0000 (09:52 -0600)
commit24f3e849b5ce9f3bf6b6be5d3e730562e927aa79
tree2aeee9a5124aea2f9617971dc2f3421fd8a0e858
parent2bc5f86adf5f1c0feb76d83e1a627e5649e6beab
Add thread safety to some environment accesses

The previous commit added a mutex specifically for protecting against
simultaneous accesses of the environment.  This commit changes the
normal getenv, putenv, and clearenv functions to use it, to avoid races.

This makes the code simpler in places where we've gotten burned and
added stuff to avoid races.  Other places where we haven't known we were
getting burned could have existed until now.  Now that comes
automatically, and we can remove the special cases we earlier stumbled
over.

getenv() returns a pointer to static memory, which can be overwritten at
any moment from another thread, or even another getenv from the same
thread.  This commit changes the accesses to be under control of a
mutex, and in the case of getenv, a mortalized copy is created so that
there is no possible race.
embed.fnc
embed.h
inline.h
iperlsys.h
locale.c
perl.c
proto.h
util.c