homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author doko
Recipients doko
Date 2012年04月05日.09:01:22
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1333616483.39.0.0432953809764.issue14505@psf.upfronthosting.co.za>
In-reply-to
Content
[forwarded from http://bugs.debian.org/664529]
seen with 2.7.3 rc2
File descriptors opened by PyFile_FromString don't get closed when the
reference count is decreased.
Here's my test program, pythony.c:
#include <Python.h>
int main()
{
 int i = 0;
 PyObject *obj;
 Py_Initialize();
 while (i++ < 5) {
 obj = PyFile_FromString("hello.py", "r");
 assert(obj);
 Py_DECREF(obj);
 }
 Py_Finalize();
}
hello.py is 'print("hello world")'.
I'm compiling it with both Python 2.6 and 2.7.
$ gcc pythony.c -lpython2.6 -L/usr/lib/python2.6/config -I/usr/include/python2.6/ -o pythony-2.6
$ gcc pythony.c -lpython2.7 -L/usr/lib/python2.7/config -I/usr/include/python2.7/ -o pythony-2.7
$ strace ./pythony-2.6 2>&1 | tail -n 20
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffb1d097b0) = -1 EINVAL (Invalid argument)
ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffb1d097b0) = -1 EINVAL (Invalid argument)
open("hello.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
close(3) = 0
open("hello.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
close(3) = 0
open("hello.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
close(3) = 0
open("hello.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
close(3) = 0
open("hello.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
close(3) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f1e1a0224f0}, {0x7f1e1a49a160, [], SA_RESTORER, 0x7f1e1a0224f0}, 8) = 0
exit_group(0) = ?
$ strace ./pythony-2.7 2>&1 | tail -n 20
fstat(4, {st_mode=S_IFREG|0644, st_size=1950, ...}) = 0
read(4, "", 4096) = 0
close(4) = 0
munmap(0x7fa41f10f000, 4096) = 0
close(3) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7ffff7bd33f0) = -1 EINVAL (Invalid argument)
ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7ffff7bd33f0) = -1 EINVAL (Invalid argument)
open("hello.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
open("hello.py", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
open("hello.py", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
open("hello.py", O_RDONLY) = 6
fstat(6, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
open("hello.py", O_RDONLY) = 7
fstat(7, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7fa4206e24f0}, {0x7fa420b8dd50, [], SA_RESTORER, 0x7fa4206e24f0}, 8) = 0
exit_group(0) = ?
The Python 2.7 version never calls close, not even at Py_Finalize().
On #d-d, jwilk suspected that this change might be the cause:
http://hg.python.org/cpython/rev/0f5b64630fda/#l4.46 
History
Date User Action Args
2012年04月05日 09:01:23dokosetrecipients: + doko
2012年04月05日 09:01:23dokosetmessageid: <1333616483.39.0.0432953809764.issue14505@psf.upfronthosting.co.za>
2012年04月05日 09:01:22dokolinkissue14505 messages
2012年04月05日 09:01:22dokocreate

AltStyle によって変換されたページ (->オリジナル) /