Follow-up Comment #10, bug #63070 (project make):
In glibc-2.17 posix_spawn returns 0 whether POSIX_SPAWN_USEVFORK is set or
not.
When POSIX_SPAWN_USEVFORK is not set posix_spawn returns 0 and errno is 0.
When POSIX_SPAWN_USEVFORK is set posix_spawn returns 0 and errno is ENOEXEC.
However, today i realized one aspect that we overlooked. There is this
configure check which is supposed to disable posix_spawn.
Why was posix_spawn enabled on this box?
This is the configure check for posix_spawn.
++++
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <spawn.h>
#include <string.h>
extern char **environ;
int main() {
char* path = strdup("./non-existent");
char *argv[[2]];
argv[[0]] = path;
argv[[1]] = 0;
return posix_spawn(0, path, 0, 0, argv, environ);
}]])],
[make_cv_synchronous_posix_spawn=no],
[make_cv_synchronous_posix_spawn=yes],
[make_cv_synchronous_posix_spawn="no (cross-compiling)"])]))
----
This check contains a memory leak of string "./non-existent". i specify
-fsanitize=leak and this leak causes the test to fail.
when the test fails configure mistakenly treats this failure as a posix_spawn
return code being non zero and enables posix_spawn.
We can fix this configure check and keep job.c intact.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?63070>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/