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.
Created on 2005年12月23日 18:11 by effbot, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Messages (6) | |||
|---|---|---|---|
| msg60857 - (view) | Author: Fredrik Lundh (effbot) * (Python committer) | Date: 2005年12月23日 18:11 | |
When fetching large documents via SSL, the imaplib attempts to read it all in one chunk, but the SSL socket layer only returns ~16k at a time. The result is that Python will end up allocating, say, a 15 megabyte block, shrink it to a few kilobytes, occasionally allocate a medium-sized block (to hold the list of chunks), and repeat this again and again and again. Not all malloc implementations can reuse the (15 megabytes minus a few kilobyte) block when allocating the next 15 megabyte block. In a worst case scenario, you'll need some 13 gigabytes of virtual memory to read a 15 megabyte message... A simple solution is to change data = self.sslobj.read(size-read) to data = self.sslobj.read(min(size-read, 16384)) For more on this, see this thread: http://groups.google.com/group/comp.lang.python/browse_ frm/thread/3737500bac287575/d715bf614a86e786 </F> |
|||
| msg60858 - (view) | Author: Fredrik Lundh (effbot) * (Python committer) | Date: 2005年12月25日 10:57 | |
Logged In: YES user_id=38376 As noted in that thread, the same problem applies to non- SSL accesses. The problematic line is: data = self._sock.recv(recv_size) |
|||
| msg61302 - (view) | Author: Christian Heimes (christian.heimes) * (Python committer) | Date: 2008年01月20日 14:40 | |
I read your posting on the python general list. Eeeeh! That's awful. |
|||
| msg61651 - (view) | Author: Richard Cooper (rich) | Date: 2008年01月24日 19:25 | |
I think I was just bitten by the non-SSL version of this bug on Python 2.5.1 (r251:54863) on Mac OS 10.5. It manifested itself as a "malloc error: can't allocate region" while downloading a message using imaplib. As suggested by effbot I changed "data = self._sock.recv(recv_size)" to "data = self._sock.recv(min(recv_size, 16384))" in both places that line appears in socket.py. Making that change fixed the problem for me. Note that http://bugs.python.org/issue1092502 seems to be a duplicate of this issue. That issue contains a slightly different fix proposed by a_lauer, which I've not tried. |
|||
| msg62795 - (view) | Author: A.M. Kuchling (akuchling) * (Python committer) | Date: 2008年02月23日 19:07 | |
Fredrik's suggested fix for SSL IMAP committed as rev. 61006, and to 2.5-maint in rev. 61007. There still seems to be a problem with the non-SSL version. I'm looking into that next. |
|||
| msg62798 - (view) | Author: A.M. Kuchling (akuchling) * (Python committer) | Date: 2008年02月23日 19:32 | |
Andreas Lauer's suggested fix on #1092502 is correct, and fixes the problem for the non-SSL IMAP class. Applied to 2.6 trunk in rev. 61008 and to 2.5-maint in rev. 61009. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:14 | admin | set | github: 42723 |
| 2008年03月07日 10:24:19 | vila | set | nosy: + vila |
| 2008年02月23日 19:32:11 | akuchling | set | status: open -> closed resolution: fixed messages: + msg62798 |
| 2008年02月23日 19:07:45 | akuchling | set | messages: + msg62795 |
| 2008年02月23日 18:52:09 | akuchling | set | assignee: akuchling nosy: + akuchling |
| 2008年01月28日 20:57:24 | akuchling | set | keywords: + patch |
| 2008年01月24日 19:25:38 | rich | set | nosy:
+ rich messages: + msg61651 |
| 2008年01月20日 14:41:00 | christian.heimes | set | versions:
+ Python 2.6, Python 2.5, - Python 2.4 nosy: + christian.heimes messages: + msg61302 priority: normal -> high keywords: + easy type: behavior |
| 2005年12月23日 18:11:10 | effbot | create | |