⛏️ index : buildtools.git

author Jérôme Duval <jerome.duval@gmail.com> 2018-01-06 16:48:36.0 +01:00:00
committer Jérôme Duval <jerome.duval@gmail.com> 2018-01-06 16:48:36.0 +01:00:00
commit
923a34a14be103a54adbaba438e080e086edd526 [patch]
tree
019ae72033cfb01dcd3a57bfd745f6c8667d6ec6
parent
20a46bd5f9af3618ab03662921b8d30e00916c13
download
923a34a14be103a54adbaba438e080e086edd526.tar.gz

jam: use posix_spawnp() instead of fork() on linux.

the gain is about 10% on a 8-job kernel full build.

Diff

 jam/execunix.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/jam/execunix.c b/jam/execunix.c
index 7e93603..eba2aba 100644
--- a/jam/execunix.c
+++ a/jam/execunix.c
@@ -50,8 +50,18 @@
# include <process.h>
# endif

# ifdef __linux__
# define USE_POSIX_SPAWN
# endif

# ifdef unix
# include <unistd.h>

# ifdef USE_POSIX_SPAWN
extern char **environ;
# include <spawn.h>
# endif

# endif

# ifdef OS_NT
@@ -226,6 +236,13 @@
	    exit( EXITBAD );
	}
# else
# ifdef USE_POSIX_SPAWN
	if (posix_spawnp(&pid, argv[0], NULL, NULL, (char * const*)argv, environ) != 0)
	{
	    perror( "posix_spawnp" );
	    exit( EXITBAD );
	}
# else
# ifdef NO_VFORK
	if ((pid = fork()) == 0)
   	{
@@ -245,6 +262,7 @@
	    perror( "vfork" );
	    exit( EXITBAD );
	}
# endif
# endif
	/* Save the operation for execwait() to find. */