projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
overhaul system() and popen() to use vfork; fix various related bugs
[musl]
/
src
/
process
/
posix_spawn.c
diff --git
a/src/process/posix_spawn.c
b/src/process/posix_spawn.c
index
8a6ff6d
..
e855748
100644
(file)
--- a/
src/process/posix_spawn.c
+++ b/
src/process/posix_spawn.c
@@
-4,6
+4,7
@@
#include <stdint.h>
#include <fcntl.h>
#include "syscall.h"
#include <stdint.h>
#include <fcntl.h>
#include "syscall.h"
+#include "pthread_impl.h"
#include "fdop.h"
#include "libc.h"
#include "fdop.h"
#include "libc.h"
@@
-30,7
+31,7
@@
int __posix_spawnx(pid_t *restrict res, const char *restrict path,
if (!attr) attr = &dummy_attr;
if (!attr) attr = &dummy_attr;
- sigprocmask(SIG_BLOCK,
(void *)(uint64_t []){-1}
, &oldmask);
+ sigprocmask(SIG_BLOCK,
SIGALL_SET
, &oldmask);
__acquire_ptc();
pid = __vfork();
__acquire_ptc();
pid = __vfork();
@@
-43,14
+44,14
@@
int __posix_spawnx(pid_t *restrict res, const char *restrict path,
return 0;
}
return 0;
}
- for (i=1; i<=
64
; i++) {
+ for (i=1; i<=
8*__SYSCALL_SSLEN
; i++) {
struct sigaction sa;
struct sigaction sa;
- sigaction(i, 0, &sa);
- if (sa.sa_handler!=SIG_IGN ||
+
__libc_
sigaction(i, 0, &sa);
+ if (sa.sa_handler!=SIG_
DFL && (sa.sa_handler!=SIG_
IGN ||
((attr->__flags & POSIX_SPAWN_SETSIGDEF)
((attr->__flags & POSIX_SPAWN_SETSIGDEF)
- && sigismember(&attr->__def, i) )) {
+ && sigismember(&attr->__def, i) ))
)
{
sa.sa_handler = SIG_DFL;
sa.sa_handler = SIG_DFL;
- sigaction(i, &sa, 0);
+
__libc_
sigaction(i, &sa, 0);
}
}
}
}