Peek __mach_task_self_ value before proc_dostop call to work around kernel paging bug.

This commit is contained in:
Roland McGrath 1995-12-22 05:57:24 +00:00
parent 567676ff81
commit e3fa2641f4
1 changed files with 6 additions and 4 deletions

View File

@ -109,7 +109,7 @@ __fork (void)
__mutex_lock (*p);
}
__mutex_lock (&_hurd_siglock);
newtask = MACH_PORT_NULL;
thread = sigthread = MACH_PORT_NULL;
newproc = MACH_PORT_NULL;
@ -121,6 +121,8 @@ __fork (void)
__spin_lock (&_hurd_ports[i].lock);
ports_locked = 1;
*(volatile task_t *) &__mach_task_self_; /* XXX work around kernel bug */
/* Stop all other threads while copying the address space,
so nothing changes. */
err = __proc_dostop (_hurd_ports[INIT_PORT_PROC].port, ss->thread);
@ -189,7 +191,7 @@ __fork (void)
(__task_get_special_port (newtask,
TASK_NOTIFY_PORT,
&notify_port) == 0 &&
__mach_port_extract_right
__mach_port_extract_right
(newtask,
portnames[i],
MACH_MSG_TYPE_MAKE_SEND,
@ -442,7 +444,7 @@ __fork (void)
if (err)
LOSE;
}
/* Set the child signal thread up to run the msgport server function
using the same signal thread stack copied from our address space.
We fetch the state before longjmp'ing it so that miscellaneous
@ -457,7 +459,7 @@ __fork (void)
state.SP = __hurd_sigthread_stack_base;
#else
state.SP = __hurd_sigthread_stack_end;
#endif
#endif
MACHINE_THREAD_STATE_SET_PC (&state,
(unsigned long int) _hurd_msgport_receive);
if (err = __thread_set_state (sigthread, MACHINE_THREAD_STATE_FLAVOR,