aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/mach/hurd/bind.c30
2 files changed, 18 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index db9b160..b67a865 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2001-12-10 Roland McGrath <roland@frob.com>
+ * sysdeps/mach/hurd/bind.c (bind): Don't deallocate IFSOCK if we never
+ set it.
+
* shlib-versions [USE_IN_LIBIO] (.*-.*-gnu-gnu.*): Set default
set to GLIBC_2.2.5, not GLIBC_2.2.4.
diff --git a/sysdeps/mach/hurd/bind.c b/sysdeps/mach/hurd/bind.c
index 7077cc9..f59a44c 100644
--- a/sysdeps/mach/hurd/bind.c
+++ b/sysdeps/mach/hurd/bind.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+/* Copyright (C) 1992,94,95,96,97,98,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -58,7 +58,6 @@ bind (fd, addrarg, len)
if (! err)
{
- file_t ifsock;
/* Set the node's translator to make it a local-domain socket. */
err = __file_set_translator (node,
FS_TRANS_EXCL | FS_TRANS_SET,
@@ -77,26 +76,27 @@ bind (fd, addrarg, len)
if (! err)
{
/* Get a port to the ifsock translator. */
- ifsock = __file_name_lookup_under (dir, n, 0, 0);
+ file_t ifsock = __file_name_lookup_under (dir, n, 0, 0);
if (ifsock == MACH_PORT_NULL)
{
err = errno;
/* If we failed, get rid of the node we created. */
__dir_unlink (dir, n);
}
+ else
+ {
+ /* Get the address port. */
+ err = __ifsock_getsockaddr (ifsock, &aport);
+ if (err == MIG_BAD_ID || err == EOPNOTSUPP)
+ /* We are not talking to /hurd/ifsock. Probably
+ someone came in after we linked our node, unlinked
+ it, and replaced it with a different node, before we
+ did our lookup. Treat it as if our link had failed
+ with EEXIST. */
+ err = EADDRINUSE;
+ }
+ __mach_port_deallocate (__mach_task_self (), ifsock);
}
- if (! err)
- {
- /* Get the address port. */
- err = __ifsock_getsockaddr (ifsock, &aport);
- if (err == MIG_BAD_ID || err == EOPNOTSUPP)
- /* We are not talking to /hurd/ifsock. Probably someone
- came in after we linked our node, unlinked it, and
- replaced it with a different node, before we did our
- lookup. Treat it as if our link had failed with EEXIST. */
- err = EADDRINUSE;
- }
- __mach_port_deallocate (__mach_task_self (), ifsock);
}
__mach_port_deallocate (__mach_task_self (), dir);