diff --git a/pgadmin/db/pgQueryThread.cpp b/pgadmin/db/pgQueryThread.cpp index 010e48d..e69ee9c 100644 --- a/pgadmin/db/pgQueryThread.cpp +++ b/pgadmin/db/pgQueryThread.cpp @@ -44,6 +44,7 @@ pgQueryThread::pgQueryThread(pgConn *_conn, const wxString &qry, int _resultToRe caller = _caller; eventId = _eventId; data = _data; + alreadyResetOnce = false; wxLogSql(wxT("Thread query (%s:%d): %s"), conn->GetHost().c_str(), conn->GetPort(), qry.c_str()); @@ -192,8 +193,18 @@ int pgQueryThread::execute() int pgQueryThread::raiseEvent(int retval) { - if (caller) + wxLogSql(wxT("raiseEvent: %d"), retval); + // check if connection still there + if (PQstatus(conn->conn) != CONNECTION_OK && !alreadyResetOnce) + { + wxLogSql(wxT("raiseEvent: oops, trying to reset connection")); + PQreset(conn->conn); + alreadyResetOnce = true; + execute(); + } + else if (caller) { + wxLogSql(wxT("raiseEvent: connection OK or already resetted, default behaviour")); #if !defined(PGSCLI) wxCommandEvent resultEvent(wxEVT_COMMAND_MENU_SELECTED, eventId); resultEvent.SetClientData(data); diff --git a/pgadmin/include/db/pgQueryThread.h b/pgadmin/include/db/pgQueryThread.h index 4a5fde1..daa2019 100644 --- a/pgadmin/include/db/pgQueryThread.h +++ b/pgadmin/include/db/pgQueryThread.h @@ -56,6 +56,8 @@ private: wxString messages; pgSet *dataSet; wxCriticalSection criticalSection; + + bool alreadyResetOnce; void *data; wxWindow *caller;