Under heavy load (e.g. making Qt 5 with kBuild make in -j4 mode) spawnvpe run by make (ends up in __spawnve as all other exec/spawn calls) returns -1 and -4 as errno, like this:
This is very annoying as it breaks overnight builds.
The most probable cause for this is some DosWait call in LIBC that returns ERROR_INTERRUPT because of the Posix signal implementation in LIBC (which uses DosKillThread to make the thread process signals) when delivering SIGCHLD or such. ERROR_INTERRUPT is 4 and LIBC is known to return OS/2 error codes negated.
Note that for some reason it happens more often when make is run by a shhd executable (i.e. over ssh from another computer). Running it locally, i see it very rarely. It's either timing or how sshd processes signals. Or both.
Under heavy load (e.g. making Qt 5 with kBuild
make
in -j4 mode)spawnvpe
run by make (ends up in__spawnve
as all other exec/spawn calls) returns -1 and -4 as errno, like this:This is very annoying as it breaks overnight builds.
The most probable cause for this is some DosWait call in LIBC that returns ERROR_INTERRUPT because of the Posix signal implementation in LIBC (which uses
DosKillThread
to make the thread process signals) when delivering SIGCHLD or such. ERROR_INTERRUPT is 4 and LIBC is known to return OS/2 error codes negated.Note that for some reason it happens more often when make is run by a
shhd
executable (i.e. over ssh from another computer). Running it locally, i see it very rarely. It's either timing or how sshd processes signals. Or both.