[Tickets #1163] NEW: IMP Memory usageok,

bugs at bugs.horde.org bugs at bugs.horde.org
Fri Jan 14 10:46:28 PST 2005


DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED.

Ticket URL: http://bugs.horde.org/ticket/?id=1163
-----------------------------------------------------------------------
 Ticket     | 1163
 Created By | jigermano at uolsinectis.com.ar
 Summary    | IMP Memory usageok, 
 Queue      | IMP
 Version    | HEAD
 State      | New
 Priority   | 2. Medium
 Type       | Enhancement
 Owners     | 
-----------------------------------------------------------------------


jigermano at uolsinectis.com.ar (2005-01-14 10:46) wrote:

Hi.
I have been doing some simple tests with IMP4. It's a great piece of
 software and excellent functionality.
 I'm setting it up to be used by several thousands of clients and although
 it'll run in pretty big machines (a couple of Dual Xeon 2.8Ghz, 2Gb Ram,
 SCSI RAID 6) I am evaluating some more of the cpu/memory intensive
 caracteristics (compression, mime decode, text processing -Filter class-).
 We allow our clients mails up to 13Mb each. Now, I tested IMP with a 8Mb
 attachment and got:
 
 (I started using a 20Mb limit)
 
   PHP Fatal error:  Allowed memory size of 20971520 bytes exhausted (tried
 to allocate 10646241 bytes) in /usr/local/lib/php/Horde/MIME/Part.php on
 line 306
 
 and after moving to 50Mb limit:
 
   PHP Fatal error:  Allowed memory size of 50331648 bytes exhausted (tried
 to allocate 10646241 bytes) in /usr/local/lib/php/Horde/MIME/Part.php on
 line 1209
 
 I think 10646241 is the sizes of the base 64 encoded attachment.
 After a short following of the code, I found lot of memory copies. Don't
 know if they´re unnecesary, but I took a chance and made some changes:
 
 After this:
 Index: lib/MIME/Contents.php
 ===================================================================
 RCS file: /repository/imp/lib/MIME/Contents.php,v
 retrieving revision 1.155
 diff -u -b -r1.155 Contents.php
 --- lib/MIME/Contents.php       7 Jan 2005 19:09:07 -0000       1.155
 +++ lib/MIME/Contents.php       14 Jan 2005 15:28:03 -0000
 @@ -155,15 +155,14 @@
        *
        * @return string  The text of the part.
        */
 -    function getBodyPart($id)
 +    function &getBodyPart($id)
       {
 -        $contents = '';
 
           if (!isset($this->_bodypart[$id])) {
               $this->_bodypart[$id] =
 @imap_fetchbody($GLOBALS['imp']['stream'], $this->_index, $id, FT_UID);
           }
 
 -        return ($contents . $this->_bodypart[$id]);
 +        return !empty($this->_bodypart[$id])?$this->_bodypart[$id]:'';
       }
 
 And
 
 Index: Part.php
 ===================================================================
 RCS file: /repository/framework/MIME/MIME/Part.php,v
 retrieving revision 1.178
 diff -u -b -r1.178 Part.php
 --- Part.php    3 Jan 2005 13:09:09 -0000       1.178
 +++ Part.php    14 Jan 2005 15:40:09 -0000
 @@ -301,9 +301,9 @@
        * @param string $contents           The part body.
        * @param optional string $encoding  The current encoding of the
 contents.
        */
 -    function setContents($contents, $encoding = null)
 +    function setContents(&$contents, $encoding = null)
       {
 -        $this->_contents = $contents;
 +        $this->_contents = &$contents;
           $this->_flags['contentsSet'] = true;
           $this->_currentEncoding = (is_null($encoding)) ?
 $this->getCurrentEncoding() : MIME::encoding($encoding, MIME_STRING);
       }
 @@ -382,7 +382,7 @@
        */
       function transferDecodeContents()
       {
 -        $contents = $this->transferDecode();
 +        $contents = &$this->transferDecode();
           $this->_currentEncoding = $this->_flags['lastTransferDecode'];
           $this->setTransferEncoding($this->_currentEncoding);
 
 @@ -1190,7 +1190,8 @@
        */
       function transferDecode()
       {
 -        $contents = $this->getContents();
 +
 +        $contents = &$this->getContents();
           $encoding = $this->getCurrentEncoding();
 
           /* If the contents are empty, return now. */
 
 I was able to download the attachment with the same php.ini settings. Can
 anyone see a problem with this?

Juan




More information about the bugs mailing list