os_vm_address_t addr;
- struct thread *th = (struct thread*) exception_port;
+ struct thread *th;
FSHOW((stderr,"/entering catch_exception_raise with exception: %d\n", exception));
+ th = *(struct thread**)exception_port;
switch (exception) {
(thread_state_t)&exception_state,
&exception_state_count);
addr = (void*)exception_state.faultvaddr;
-
-
/* note the os_context hackery here. When the signal handler returns,
* it won't go back to what it was doing ... */
if(addr >= CONTROL_STACK_GUARD_PAGE(th) &&
ret = KERN_INVALID_RIGHT;
}
+ if (current_mach_task == MACH_PORT_NULL)
+ current_mach_task = mach_task_self();
+
dealloc_ret = mach_port_deallocate (current_mach_task, thread);
if (dealloc_ret) {
lose("mach_port_deallocate (thread) failed with return_code %d\n", dealloc_ret);