On Tue, Dec 29, 2009 at 11:10:00PM +0100, Samuel Thibault wrote:
>
> That's the same. To make it clearer, see attached patch.
I meant in the other branch of the if (though for some reason I didn't
consider the server part's if). Patch attatched for clarity.
Regards,
Fredrik
diff --git a/auth/auth.c b/auth/auth.c
index 3c5fa86..737fd98 100644
--- a/auth/auth.c
+++ b/auth/auth.c
@@ -294,20 +294,21 @@ S_auth_user_authenticate (struct authhandle *userauth,
s = hurd_ihash_find (&pending_servers, rendezvous);
if (s)
{
/* Found it! Extract the port. */
*newport = s->passthrough;
*newporttype = MACH_MSG_TYPE_MOVE_SEND;
/* Remove it from the pending list. */
hurd_ihash_locp_remove (&pending_servers, s->locp);
+ error_t err2 = mach_port_request_notification(mach_task_self(), rendezvous, MACH_NOTIFY_DEAD_NAME, 0, MACH_PORT_NULL, MACH_MSG_TYPE_MAKE_SEND_ONCE, &old);
/* Give the server the auth port and wake the RPC up.
We need to add a ref in case the port dies. */
s->user = userauth;
ports_port_ref (userauth);
condition_signal (&s->wakeup);
mutex_unlock (&pending_lock);
mach_port_deallocate (mach_task_self (), rendezvous);
return 0;