Bugs item #1423153, was opened at 2006-02-02 18:25 Message generated for change (Comment added) made by majid You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1423153&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Extension Modules Group: Python 2.4 Status: Open Resolution: None Priority: 5 Submitted By: Fazal Majid (majid) Assigned to: Nobody/Anonymous (nobody) Summary: mmap module leaks file descriptors on UNIX Initial Comment: On UNIX, mmapmodule.c makes a call to dup(2) prior to mapping the file descriptor into memory (oddly enough, it doesn't map the new fd resulting from dup(), but the old one). The close method does not release this file descriptor, however, leading to a leak. If mmap is used repeatedly, the process will eventually run out of file descriptors, as can easily be shown with this test case: import sys, os, mmap for i in xrange(2000): f = os.open('/dev/zero', os.O_RDWR) m = mmap.mmap(f, 10000) os.close(f) a = m[0:100] m[100:200] = 'F' * 100 m.close() ---------------------------------------------------------------------- >Comment By: Fazal Majid (majid) Date: 2006-02-03 09:43 Message: Logged In: YES user_id=110477 >From my reading of the source, the fd is kept around just to support the mmap.size() and mmap.resize() methods. I tend to agree, tying down a fd is wasteful. ---------------------------------------------------------------------- Comment By: Keith Dart (kdart) Date: 2006-02-03 06:51 Message: Logged In: YES user_id=16527 I would also like to add that the following no longer works in Python 2.4: _buf = mmap.mmap(-1, 8192, flags=mmap.MAP_PRIVATE|mmap.MAP_ANONYMOUS, prot=mmap.PROT_READ|mmap.PROT_WRITE ) This is because the fd value of -1 raises an exception because it is being dup-ed inside the mmap module. But the fd is ignored in anonymous mmaps and does not need to be dup-ed. This worked in older Python (2.3). Is the dup() call really necessary? ---------------------------------------------------------------------- Comment By: Fazal Majid (majid) Date: 2006-02-02 18:44 Message: Logged In: YES user_id=110477 The following patch closes the file descriptor when the mmap object's close method is called, and seems to resolve this problem. ---------------------------------------------------------------------- Comment By: Fazal Majid (majid) Date: 2006-02-02 18:27 Message: Logged In: YES user_id=110477 SourceForge munged the formatting of the test case, so I am attaching a copy as well. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1423153&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com