[Tickets #12837] Re: Imap_Client: Leaking IMAP socket on error
noreply at bugs.horde.org
noreply at bugs.horde.org
Mon Nov 18 22:50:15 UTC 2013
DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED.
Ticket URL: http://bugs.horde.org/ticket/12837
------------------------------------------------------------------------------
Ticket | 12837
Updated By | Michael Slusarz <slusarz at horde.org>
Summary | Imap_Client: Leaking IMAP socket on error
Queue | Horde Framework Packages
Version | Git master
Type | Bug
State | Feedback
Priority | 1. Low
Milestone |
Patch |
Owners |
------------------------------------------------------------------------------
Michael Slusarz <slusarz at horde.org> (2013-11-18 15:50) wrote:
> I've just quickly hacked together the test script to check if it
> really allocates a socket to the IMAP server when an exception is
> thrown. listMailboxes() was added to do something on the socket.
> (I had to "reverse diagnose" the issue since I just saw the server
> ran out of sockets.)
>
> It seems to me the PHP gc does not clean up the $imap object when
> it's still inside the loop.
That's correct. Why would it? The $imap object is successfully
created. It's not until the listMailboxes call is run that the
exception is thrown. But all code/variables before that in the try
block isn't backed-out. Thus, $imap still exists after the
listMailboxes call fails.
If you want to explicitly check whether the $imap object can actually
connect to the server, you need to manually call $imap->login().
> I'm not sure how I can see what part of horde actually caused the
> problem on a productive box, ActiveSync was not in use and still
> something got stuck in an endless loop. We have an unlimited
> maximum_execution_time and I now changed it to 43200 seconds. That
> should be way enough.
That isn't desirable. If something is not finishing in 30 seconds,
then there is something wrong with the script. Bumping the max
execution time isn't going to help.
> I'll check the Kolab code if it properly reuses the Imap_Client
> object, that's a good hint.
My guess is that this is the issue. Or else, an Exception is not
being handled correctly somewhere.
Within a self-contained piece of code - say the Kolab library - you
only need a single IMAP object that can be shared between all code.
More information about the bugs
mailing list