* cygheap.h (cygheap_fdmanip::release): Simplify.
* dtable.cc (dtable::release): Make void again. Skip not_open check since it is guaranteed to be open. Don't bother deleting here since actual deletion will be handled in cygheap_fdget::~cygheap_fdget. * dtable.h (dtable::release): Make void again. * syscalls.cc (dup2): Bump fhandler use count on successful dup.
This commit is contained in:
parent
ad87edbe61
commit
0646a508aa
@ -1,3 +1,12 @@
|
||||
2012-01-22 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||
|
||||
* cygheap.h (cygheap_fdmanip::release): Simplify.
|
||||
* dtable.cc (dtable::release): Make void again. Skip not_open check
|
||||
since it is guaranteed to be open. Don't bother deleting here since
|
||||
actual deletion will be handled in cygheap_fdget::~cygheap_fdget.
|
||||
* dtable.h (dtable::release): Make void again.
|
||||
* syscalls.cc (dup2): Bump fhandler use count on successful dup.
|
||||
|
||||
2012-01-22 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||
|
||||
* cygheap.h (cygheap_fdget::~cygheap_fdget): Simplify now that refcnt
|
||||
|
@ -407,12 +407,7 @@ public:
|
||||
delete fh;
|
||||
}
|
||||
}
|
||||
void release ()
|
||||
{
|
||||
fh = cygheap->fdtab[fd];
|
||||
if (cygheap->fdtab.release (fd))
|
||||
fh = NULL;
|
||||
}
|
||||
void release () { cygheap->fdtab.release (fd); }
|
||||
};
|
||||
|
||||
class cygheap_fdenum : public cygheap_fdmanip
|
||||
|
@ -237,26 +237,13 @@ dtable::find_unused_handle (int start)
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool
|
||||
void
|
||||
dtable::release (int fd)
|
||||
{
|
||||
bool deleted;
|
||||
if (not_open (fd))
|
||||
deleted = false;
|
||||
else
|
||||
{
|
||||
if (fds[fd]->need_fixup_before ())
|
||||
dec_need_fixup_before ();
|
||||
if (fds[fd]->refcnt (-1) > 0)
|
||||
deleted = false;
|
||||
else
|
||||
{
|
||||
deleted = true;
|
||||
delete fds[fd];
|
||||
}
|
||||
fds[fd] = NULL;
|
||||
}
|
||||
return deleted;
|
||||
if (fds[fd]->need_fixup_before ())
|
||||
dec_need_fixup_before ();
|
||||
fds[fd]->refcnt (-1);
|
||||
fds[fd] = NULL;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* dtable.h: fd table definition.
|
||||
|
||||
Copyright 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||
2010, 2011 Red Hat, Inc.
|
||||
2010, 2011, 2012 Red Hat, Inc.
|
||||
|
||||
This file is part of Cygwin.
|
||||
|
||||
@ -63,7 +63,7 @@ public:
|
||||
}
|
||||
int find_unused_handle (int start);
|
||||
int find_unused_handle () { return find_unused_handle (first_fd_for_open);}
|
||||
bool release (int fd) __attribute__ ((regparm (2)));
|
||||
void release (int fd) __attribute__ ((regparm (2)));
|
||||
void init_std_file_from_handle (int fd, HANDLE handle);
|
||||
int dup3 (int oldfd, int newfd, int flags);
|
||||
void fixup_after_exec ();
|
||||
|
@ -139,8 +139,8 @@ dup2 (int oldfd, int newfd)
|
||||
cygheap_fdget cfd (oldfd);
|
||||
res = (cfd >= 0) ? oldfd : -1;
|
||||
}
|
||||
else
|
||||
res = cygheap->fdtab.dup3 (oldfd, newfd, 0);
|
||||
else if ((res = cygheap->fdtab.dup3 (oldfd, newfd, 0)) == newfd)
|
||||
cygheap->fdtab[newfd]->refcnt (1);
|
||||
|
||||
syscall_printf ("%R = dup2(%d, %d)", res, oldfd, newfd);
|
||||
return res;
|
||||
|
Loading…
x
Reference in New Issue
Block a user