od...@efficios.com skribis:

> From: Olivier Dion <olivier.d...@polymtl.ca>
>
> This is an amendment to 84bf84032208e21d20ad13f3033d4fca3a512014.
>
> The warning was only emitted for calling `environ', even if only reading
> and no mutation occurred.
>
> However, it is correct  to read the environment in a
> multi-threaded process.  It is however unsafe to mutate it.
>
> The same logic also applies to `putenv'.
>
> * libguile/posix.c
>   (maybe_warn_about_environ_mutation): New private procedure ...
>   (scm_environ): ... called here when mutating the environment ...
>   (scm_putenv): ... and here.
>
> Signed-off-by: Olivier Dion <olivier.d...@polymtl.ca>

Applied with the changes below, thanks!

Ludo'.

diff --git a/NEWS b/NEWS
index d5729a913..bad69ef03 100644
--- a/NEWS
+++ b/NEWS
@@ -88,6 +88,8 @@ every line in a file.
    in turn, would trigger warnings from 'primitive-fork' and 'environ'
    suggesting they are being called in a multi-threaded context, when in
    fact user code did not create any thread.
+** Calling 'environ' without arguments in a multi-threaded program is OK
+   This used to trigger a warning, unduly.
 
 
 Changes in 3.0.10 (since 3.0.9)
diff --git a/libguile/posix.c b/libguile/posix.c
index d111b8942..dde77b8ee 100644
--- a/libguile/posix.c
+++ b/libguile/posix.c
@@ -1705,7 +1705,8 @@ SCM_DEFINE (scm_uname, "uname", 0, 0, 0,
 #undef FUNC_NAME
 #endif /* HAVE_UNAME */
 
-static void maybe_warn_about_environ_mutation (void)
+static void
+maybe_warn_about_environ_mutation (void)
 {
   /* Mutating `environ' directly in a multi-threaded program is
      undefined behavior.  */
@@ -1733,7 +1734,7 @@ SCM_DEFINE (scm_environ, "environ", 0, 1, 0,
   else
     {
       /* Mutating the environment in a multi-threaded program is hazardous. */
-      maybe_warn_about_environ_mutation();
+      maybe_warn_about_environ_mutation ();
 
       /* Arrange to not use GC-allocated storage for what goes into
          'environ' as libc might reallocate it behind our back.  */
@@ -1955,7 +1956,7 @@ SCM_DEFINE (scm_putenv, "putenv", 1, 0, 0,
   char *c_str = scm_to_locale_string (str);
 
   /* Mutating the environment in a multi-threaded program is hazardous. */
-  maybe_warn_about_environ_mutation();
+  maybe_warn_about_environ_mutation ();
 
   /* Leave C_STR in the environment.  */
 

Reply via email to