Date: Thu, 11 Aug 2011 13:29:59 +0000 (UTC) From: Jonathan Anderson <jonathan@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r224781 - head/sys/kern Message-ID: <201108111329.p7BDTxVN094719@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jonathan Date: Thu Aug 11 13:29:59 2011 New Revision: 224781 URL: http://svn.freebsd.org/changeset/base/224781 Log: Only call fdclose() on successfully-opened FDs. Since kern_openat() now uses falloc_noinstall() and finstall() separately, there are cases where we could get to cleanup code without ever creating a file descriptor. In those cases, we should not call fdclose() on FD -1. Approved by: re (kib), mentor (rwatson) Sponsored by: Google Inc Modified: head/sys/kern/vfs_syscalls.c Modified: head/sys/kern/vfs_syscalls.c ============================================================================== --- head/sys/kern/vfs_syscalls.c Thu Aug 11 13:15:11 2011 (r224780) +++ head/sys/kern/vfs_syscalls.c Thu Aug 11 13:29:59 2011 (r224781) @@ -1116,7 +1116,8 @@ kern_openat(struct thread *td, int fd, c * Clean up the descriptor, but only if another thread hadn't * replaced or closed it. */ - fdclose(fdp, fp, indx, td); + if (indx != -1) + fdclose(fdp, fp, indx, td); fdrop(fp, td); if (error == ERESTART) @@ -1185,7 +1186,8 @@ success: bad: VFS_UNLOCK_GIANT(vfslocked); bad_unlocked: - fdclose(fdp, fp, indx, td); + if (indx != -1) + fdclose(fdp, fp, indx, td); fdrop(fp, td); td->td_retval[0] = -1; return (error);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108111329.p7BDTxVN094719>