[GLIB] WebDriver: race condition when session starts
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 31 Jan 2019 13:06:16 +0000 (13:06 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 31 Jan 2019 13:06:16 +0000 (13:06 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194086

Reviewed by Philippe Normand.

This is causing flakiness in the bots, I can only reproduce it locally when my CPUs are at 100%. The thing
is that sometimes we receive an empty target list right after the connection is established because
RemoteInspector::setClient() calls pushListingsSoon() before a target has been registered. Most of the times the
target is registered before the listing is pushed, but it can happen that when pushed, the listing is still
empty. After the target is registered an empty target list means the connection was lost, so we clear the
connection and target. We need to ensure we do that only after the target has been registered.

* glib/SessionHostGlib.cpp:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240778 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebDriver/ChangeLog
Source/WebDriver/glib/SessionHostGlib.cpp

index c9f8359..d51d990 100644 (file)
@@ -1,3 +1,19 @@
+2019-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [GLIB] WebDriver: race condition when session starts
+        https://bugs.webkit.org/show_bug.cgi?id=194086
+
+        Reviewed by Philippe Normand.
+
+        This is causing flakiness in the bots, I can only reproduce it locally when my CPUs are at 100%. The thing
+        is that sometimes we receive an empty target list right after the connection is established because
+        RemoteInspector::setClient() calls pushListingsSoon() before a target has been registered. Most of the times the
+        target is registered before the listing is pushed, but it can happen that when pushed, the listing is still
+        empty. After the target is registered an empty target list means the connection was lost, so we clear the
+        connection and target. We need to ensure we do that only after the target has been registered.
+
+        * glib/SessionHostGlib.cpp:
+
 2019-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         WebDriver: POST commands require a valid parameters object
index 34f9bca..7a20b89 100644 (file)
@@ -331,9 +331,11 @@ void SessionHost::setTargetList(uint64_t connectionID, Vector<Target>&& targetLi
     ASSERT(targetList.size() <= 1);
     if (targetList.isEmpty()) {
         m_target = Target();
-        m_connectionID = 0;
-        if (m_dbusConnection)
-            g_dbus_connection_close(m_dbusConnection.get(), nullptr, nullptr, nullptr);
+        if (m_connectionID) {
+            if (m_dbusConnection)
+                g_dbus_connection_close(m_dbusConnection.get(), nullptr, nullptr, nullptr);
+            m_connectionID = 0;
+        }
         return;
     }