diff options
| author | NIIBE Yutaka <[email protected]> | 2026-02-03 05:23:14 +0100 |
|---|---|---|
| committer | NIIBE Yutaka <[email protected]> | 2026-02-03 06:30:40 +0100 |
| commit | 20c673e15bd772ee39f626f8203427b5f47601b7 (patch) | |
| tree | 4be5e83d310acfa82a92146c2209c813eb7305dd | |
| parent | po: Update Swedish translation. (diff) | |
| download | libgpg-error-20c673e15bd772ee39f626f8203427b5f47601b7.tar.gz libgpg-error-20c673e15bd772ee39f626f8203427b5f47601b7.zip | |
spawn:posix: Take care of POSIX semaphore "shared" semantics.
* src/spawn-posix.c (spawn_detached): Don't call _gpgrt_post_syscall
on the child process.
(_gpgrt_process_spawn): Likewise.
--
On NetBSD, a POSIX semaphore is somehow shared among processes, even
if sem_init is called with PSHARED=0.
GnuPG-bug-id: 8065
Signed-off-by: NIIBE Yutaka <[email protected]>
| -rw-r--r-- | src/spawn-posix.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/spawn-posix.c b/src/spawn-posix.c index bd236ad..55f6379 100644 --- a/src/spawn-posix.c +++ b/src/spawn-posix.c @@ -460,9 +460,9 @@ spawn_detached (const char *pgmname, const char *argv[], _gpgrt_pre_syscall (); pid = fork (); - _gpgrt_post_syscall (); if (pid == (pid_t)(-1)) { + _gpgrt_post_syscall (); ec = _gpg_err_code_from_syserror (); _gpgrt_log_info (_("error forking process: %s\n"), _gpg_strerror (ec)); xfree (argv); @@ -486,6 +486,7 @@ spawn_detached (const char *pgmname, const char *argv[], /*NOTREACHED*/ } + _gpgrt_post_syscall (); xfree (argv); _gpgrt_pre_syscall (); if (waitpid (pid, NULL, 0) == -1) @@ -752,9 +753,9 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv1[], _gpgrt_pre_syscall (); pid = fork (); - _gpgrt_post_syscall (); if (pid == (pid_t)(-1)) { + _gpgrt_post_syscall (); ec = _gpg_err_code_from_syserror (); _gpgrt_log_info (_("error forking process: %s\n"), _gpg_strerror (ec)); if (fd_in[0] >= 0 && fd_in[0] != 0) @@ -802,6 +803,7 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv1[], /*NOTREACHED*/ } + _gpgrt_post_syscall (); xfree (argv); process->pid = pid; |
