I am writing an Imap client. The Imap server (Groupwise) I connect to is really slow at accepting logins.

So I have made a connection pool where I store the open connections to the server.

But once in a while I get a memory segment error on the server and it crashes.

I suspect what happens is that a connection has been idle for to long, ad the connection dropped by the imap server. Which might cause some memory to be freed that is then accessed when I call noop().

It could also be be some kind of threading problem.

Does any of you hav an ide as to how I can find out? I am not used to these kind of problems, having been spoiled by Python for too long.

regards Max M


I have attached the connection pool code in the bottom.


########################################## # a borg/singleton for pooling connections. # Necessary as login can take a looong time

class ConnectionPool:

    __shared_state = {}

    def __init__(self):
        self.__dict__ = self.__shared_state

    def getConnection(self, server_uri, user, password):
        if not hasattr(self, 'connections'):
            self.connections = {}
        user_key = (server_uri, user, password)
        user_connections = self.connections.setdefault(user_key, [])
        # first try and return a connection from the pool
        for i in range(len(user_connections)-1, -1, -1):
            # a connection can be timed out,
            # try noop to see if it's still open
            connection = user_connections[i]
            try:
                connection.noop()
                return user_connections.pop(i)
            except: # else login again
                user_connections.pop(i)
        # if no usable connections in the pool,
        # create new one and return it
        return Imap4Connector(server_uri, user, password)


def release(self, connection):
# take the connection and put it in the pool
user_key = (connection.server_uri, connection.user, \


                    connection.password)
        user_connections = self.connections.setdefault(user_key, [])
        user_connections.append(connection)


--

hilsen/regards Max M, Denmark

http://www.mxm.dk/
IT's Mad Science

_______________________________________________
Zope maillist - Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
** No cross posts or HTML encoding! **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to