Hi,

Please find the attached patch for RM #2556: Runtime connection retry loop
timeout

Thanks,
Khushboo
diff --git a/docs/en_US/desktop_deployment.rst b/docs/en_US/desktop_deployment.rst
index 9765c77..745b83f 100644
--- a/docs/en_US/desktop_deployment.rst
+++ b/docs/en_US/desktop_deployment.rst
@@ -73,6 +73,13 @@ semi-colon character, for example:
 
      /Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/;/Users/dpage/python-libs/
     
-The configuration settings are stored using the QSettings class in Qt, which 
-will use an INI file on Unix systems, a plist file on Mac OS X, and the registry
-on Windows. The Python Path setting is stored in the ``PythonPath`` key.
\ No newline at end of file
+The configuration settings are stored using the QSettings class in Qt, which
+will use an INI file on Unix systems, a plist file on Mac OS X, and the registry on Windows.
+
+The configuration settings:
+
+Key                     Description of settings
+-------------------------------------------------------------------------------------
+``PythonPath``        - The Python Path
+``ApplicationPath``   - The Application Path
+``ConnectionTimeout`` - The Connection Timeout in seconds
diff --git a/runtime/pgAdmin4.cpp b/runtime/pgAdmin4.cpp
index 9054e9e..391cf45 100644
--- a/runtime/pgAdmin4.cpp
+++ b/runtime/pgAdmin4.cpp
@@ -340,28 +340,36 @@ int main(int argc, char * argv[])
     // Generate the app server URL
     QString appServerUrl = QString("http://127.0.0.1:%1/?key=%2";).arg(port).arg(key);
 
+    // Read the server connection timeout from the registry or set the default timeout.
+    QSettings settings;
+    int timeout = settings.value("ConnectionTimeout", 30).toInt();
+
     // Now the server should be up, we'll attempt to connect and get a response.
     // We'll retry in a loop a few time before aborting if necessary.
-    int attempt = 0;
-    while (attempt++ < 50)
+
+    QTime endTime = QTime::currentTime().addSecs(timeout);
+    bool alive = false;
+
+    while(QTime::currentTime() <= endTime)
     {
-        bool alive = PingServer(QUrl(appServerUrl));
+        alive = PingServer(QUrl(appServerUrl));
 
         if (alive)
         {
             break;
         }
 
-        if (attempt == 50)
-        {
-            splash->finish(NULL);
-            QString error(QWidget::tr("The application server could not be contacted."));
-            QMessageBox::critical(NULL, QString(QWidget::tr("Fatal Error")), error);
+        delay(200);
+    }
 
-            exit(1);
-        }
+    // Attempt to connect one more time in case of a long network timeout while looping
+    if(!alive && !PingServer(QUrl(appServerUrl)))
+    {
+        splash->finish(NULL);
+        QString error(QWidget::tr("The application server could not be contacted."));
+        QMessageBox::critical(NULL, QString(QWidget::tr("Fatal Error")), error);
 
-        delay(200);
+        exit(1);
     }
 
     // Create & show the main window

Reply via email to