aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--trans/fakeroot.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/trans/fakeroot.c b/trans/fakeroot.c
index 944fafdb..e70cb280 100644
--- a/trans/fakeroot.c
+++ b/trans/fakeroot.c
@@ -939,6 +939,11 @@ netfs_S_file_exec_paths (struct protid *user,
file, MACH_PORT_RIGHT_SEND, 1);
pthread_mutex_unlock (&user->po->np->lock);
+ /* Add a gratuitous send right on the protid to avoid a no-sender, and thus
+ interrupt the exec, just because we are precisely replacing the calling
+ process! */
+ mach_port_t gratuitous = ports_get_send_right (user);
+
if (!err)
{
#ifdef HAVE_FILE_EXEC_PATHS
@@ -977,6 +982,9 @@ netfs_S_file_exec_paths (struct protid *user,
for (i = 0; i < portarraylen; ++i)
mach_port_deallocate (mach_task_self (), portarray[i]);
}
+
+ mach_port_deallocate (mach_task_self (), gratuitous);
+
return err;
}