From fc295f94a3712d857c353853ffab33ee02db30fb Mon Sep 17 00:00:00 2001 From: Ashesh Vashi Date: Thu, 16 Jun 2016 17:49:02 +0530 Subject: [PATCH] Remove recusive call of _wait_timeout() due to which python server is crashing --- web/pgadmin/utils/driver/psycopg2/__init__.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py index 500e9501e..17f477d01 100644 --- a/web/pgadmin/utils/driver/psycopg2/__init__.py +++ b/web/pgadmin/utils/driver/psycopg2/__init__.py @@ -798,14 +798,31 @@ Failed to reset the connection to the server due to following error: if state == psycopg2.extensions.POLL_OK: return self.ASYNC_OK elif state == psycopg2.extensions.POLL_WRITE: - if select.select([], [conn.fileno()], [], time) == ([], [], []): + # Wait for the given time and then check the return status + # If three empty lists are returned then the time-out is reached. + timeout_status = select.select([], [conn.fileno()], [], time) + if timeout_status == ([], [], []): return self.ASYNC_WRITE_TIMEOUT - # Call recursively if no timeout - return self._wait_timeout(conn, time) + + # poll again to check the state if it is still POLL_WRITE + # then return ASYNC_WRITE_TIMEOUT else return ASYNC_OK. + state = conn.poll() + if state == psycopg2.extensions.POLL_WRITE: + return self.ASYNC_WRITE_TIMEOUT + return self.ASYNC_OK elif state == psycopg2.extensions.POLL_READ: - if select.select([conn.fileno()], [], [], time) == ([], [], []): + # Wait for the given time and then check the return status + # If three empty lists are returned then the time-out is reached. + timeout_status = select.select([conn.fileno()], [], [], time) + if timeout_status == ([], [], []): return self.ASYNC_READ_TIMEOUT - return self._wait_timeout(conn, time) + + # poll again to check the state if it is still POLL_READ + # then return ASYNC_READ_TIMEOUT else return ASYNC_OK. + state = conn.poll() + if state == psycopg2.extensions.POLL_READ: + return self.ASYNC_READ_TIMEOUT + return self.ASYNC_OK else: raise psycopg2.OperationalError( "poll() returned %s from _wait_timeout function" % state