mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-24 14:41:06 +08:00
Hurd: Fix __dup3 _hurd_dtable_lock usage.
This commit is contained in:
parent
674cdbc7a3
commit
f34d6f840e
@ -1,3 +1,9 @@
|
||||
2012-05-10 Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
|
||||
* sysdeps/mach/hurd/dup3.c: Lock _hurd_dtable_lock before
|
||||
checking for _hurd_dtablesize. Unlock it right after having
|
||||
finished _hurd_dtable allocation.
|
||||
|
||||
2012-05-10 Thomas Schwinge <thomas@schwinge.name>
|
||||
|
||||
* sysdeps/mach/hurd/configure.in: Remove warning for --prefix=[...].
|
||||
|
@ -71,15 +71,14 @@ __dup3 (int fd, int fd2, int flags)
|
||||
/* Get a hold of the destination descriptor. */
|
||||
struct hurd_fd *d2;
|
||||
|
||||
__mutex_lock (&_hurd_dtable_lock);
|
||||
|
||||
if (fd2 >= _hurd_dtablesize)
|
||||
{
|
||||
/* The table is not large enough to hold the destination
|
||||
descriptor. Enlarge it as necessary to allocate this
|
||||
descriptor. */
|
||||
__mutex_unlock (&_hurd_dtable_lock);
|
||||
/* We still hold FD1's lock, but this is safe because
|
||||
_hurd_alloc_fd will only examine the cells starting
|
||||
at FD2. */
|
||||
d2 = _hurd_alloc_fd (NULL, fd2);
|
||||
if (d2)
|
||||
__spin_unlock (&d2->port.lock);
|
||||
@ -99,6 +98,7 @@ __dup3 (int fd, int fd2, int flags)
|
||||
MACH_PORT_NULL);
|
||||
}
|
||||
}
|
||||
__mutex_unlock (&_hurd_dtable_lock);
|
||||
|
||||
if (d2 == NULL)
|
||||
{
|
||||
@ -126,7 +126,6 @@ __dup3 (int fd, int fd2, int flags)
|
||||
_hurd_port_locked_set (&d2->port, port); /* Unlocks D2. */
|
||||
}
|
||||
}
|
||||
__mutex_unlock (&_hurd_dtable_lock);
|
||||
|
||||
_hurd_port_free (&d->port, &ulink, port);
|
||||
if (ctty != MACH_PORT_NULL)
|
||||
|
Loading…
x
Reference in New Issue
Block a user