[Buildd-tools-devel] Bug#486696: Bug#486696: File descriptor left open messages w/lvm snapshots
Roger Leigh
rleigh at codelibre.net
Mon Mar 9 22:45:52 UTC 2009
On Tue, Jun 17, 2008 at 02:38:50PM -0400, Joey Hess wrote:
> Package: schroot
> Version: 1.2.0-1
> Severity: minor
>
> These messages were previously mentioned in #379671, but I'm seeing them with
> current unstable.
>
> joey at kodama:~>schroot -c sid
> File descriptor 3 left open
> File descriptor 4 left open
> I: [sid-6a6a7764-9640-47e7-86d0-a05f1c305384 chroot] Running login shell: ‘/bin/zsh’
> 14:37:10 up 1 day, 21:08, 0 users, load average: 0.39, 0.53, 0.58
> joey at kodama:~>
> File descriptor 3 left open
> File descriptor 4 left open
Sorry for the long delay in continuing to follow this up.
I've checked all the code, and there are these possibilities for leaking
file descriptors:
* syslog
closelog() is called after every top-level fork() so this won't leak -
there won't be any syslog fd open before an execve().
* cctty
A C++ iostream wrapper around /dev/tty. This is created with
FD_CLOEXEC, so can't leak either. It is automatically closed on
execve and program termination (object destruction).
* other standard file I/O using regular open()/close()
This is generally wrapped using the __gnu_cxx::stdio_filebuf
stream buffer. However, we only ever do this sort of I/O in a local
open-lock-read/write-unlock-close sequence within a single function.
There's no reason for any of this code to leak fds; the iostream
wrapper even automatically closes the fd on destruction, so it's also
exception safe. At least in theory; it's potentially possible an
older libstdc++ wasn't cleaning up the fds; I did read the source
back when the problem was first reported to verify it was calling
close() correctly. I'll double check the gcc-4.3 sources.
I've tested the current git with an lvm-snapshot chroot and I can't
reproduce the failure. WRT leaking fds, there are no signigicant
changes compared with the version in stable/testing/unstable which
would make me believe that the older version behaves any differently.
It's been pretty much frozen during the Lenny freeze.
Would it be possible to verify that this is still a problem on a
current stable/testing/unstable system (it's all the same version)?
If it's still occuring, I'd very much like to track down the
source of the fd leak. To do that, I would suggest running in
a debugger, breaking on fork() and then using lsof or /proc to
look at what files the schroot process actually has open. At
fork() time, it should only have stdin, stdout, stderr, /dev/log and
/dev/tty open. If you break on the subsequent exec, the syslog
fd should be closed. And, after the exec completes, /dev/log
should have been closed by the kernel.
Thanks,
Roger
--
.''`. Roger Leigh
: :' : Debian GNU/Linux http://people.debian.org/~rleigh/
`. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/
`- GPG Public Key: 0x25BFB848 Please GPG sign your mail.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
Url : http://lists.alioth.debian.org/pipermail/buildd-tools-devel/attachments/20090309/105453ac/attachment.pgp
More information about the Buildd-tools-devel
mailing list