⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 285802 in webkit


Ignore:
Timestamp:
Nov 15, 2021, 4:57:16 AM (5 years ago)
Author:
eocanha@igalia.com
Message:

[GTK] webaudio/silent-audio-interrupted-in-background.html is a flaky timeout
https://bugs.webkit.org/show_bug.cgi?id=229964

Reviewed by Carlos Garcia Campos.

Source/WebCore:

I can't reproduce the timeout locally anymore, but I'm getting a crash sometimes. This fix is for the crash.
Unregister dbus objects on MediaSessionGLib destruction to prevent the dbus connection to keep processing requests.

  • platform/audio/glib/MediaSessionGLib.cpp:

(WebCore::MediaSessionGLib::MediaSessionGLib()): Don't register a GBusNameLostCallback, as unregistration is now going to be handled in the destructor.
(WebCore::MediaSessionGLib::~MediaSessionGLib()): Unregister dbus objects.
(WebCore::MediaSessionGLib::nameLost()): Refactored into the destructor.

  • platform/audio/glib/MediaSessionGLib.h:

(WebCore::MediaSessionGLib::nameLost()): Deleted.

LayoutTests:

Removed failing test from TestExpectations.

  • platform/gtk/TestExpectations:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r285801 r285802  
     12021-11-15  Enrique Ocaña González  <eocanha@igalia.com>
     2
     3        [GTK] webaudio/silent-audio-interrupted-in-background.html is a flaky timeout
     4        https://bugs.webkit.org/show_bug.cgi?id=229964
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        Removed failing test from TestExpectations.
     9
     10        * platform/gtk/TestExpectations:
     11
    1122021-11-15  Antti Koivisto  <antti@apple.com>
    213
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r285708 r285802  
    12481248webkit.org/b/229268 media/media-fragments/TC0009.html [ Failure Pass ]
    12491249webkit.org/b/229268 media/media-fragments/TC0014.html [ Failure Pass ]
    1250 
    1251 webkit.org/b/229964 webaudio/silent-audio-interrupted-in-background.html [ Pass Timeout ]
    12521250
    12531251# Flaky on skip-failing-test bot (EWS)
  • trunk/Source/WebCore/ChangeLog

    r285801 r285802  
     12021-11-15  Enrique Ocaña González  <eocanha@igalia.com>
     2
     3        [GTK] webaudio/silent-audio-interrupted-in-background.html is a flaky timeout
     4        https://bugs.webkit.org/show_bug.cgi?id=229964
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        I can't reproduce the timeout locally anymore, but I'm getting a crash sometimes. This fix is for the crash.
     9        Unregister dbus objects on MediaSessionGLib destruction to prevent the dbus connection to keep processing requests.
     10
     11        * platform/audio/glib/MediaSessionGLib.cpp:
     12        (WebCore::MediaSessionGLib::MediaSessionGLib()): Don't register a GBusNameLostCallback, as unregistration is now going to be handled in the destructor.
     13        (WebCore::MediaSessionGLib::~MediaSessionGLib()): Unregister dbus objects.
     14        (WebCore::MediaSessionGLib::nameLost()): Refactored into the destructor.
     15        * platform/audio/glib/MediaSessionGLib.h:
     16        (WebCore::MediaSessionGLib::nameLost()): Deleted.
     17
    1182021-11-15  Antti Koivisto  <antti@apple.com>
    219
  • trunk/Source/WebCore/platform/audio/glib/MediaSessionGLib.cpp

    r283437 r285802  
    219219    m_instanceId = applicationID.isEmpty() ? makeString("org.mpris.MediaPlayer2.webkit.instance", getpid(), "-", identifier.toUInt64()) : makeString("org.mpris.MediaPlayer2.", applicationID.ascii().data(), "-", identifier.toUInt64());
    220220
    221     m_ownerId = g_bus_own_name_on_connection(m_connection.get(), m_instanceId.ascii().data(), G_BUS_NAME_OWNER_FLAGS_NONE, nullptr,
    222         reinterpret_cast<GBusNameLostCallback>(+[](GDBusConnection* connection, const char*, gpointer userData) {
    223             auto& session = *reinterpret_cast<MediaSessionGLib*>(userData);
    224             session.nameLost(connection);
    225         }), this, nullptr);
     221    m_ownerId = g_bus_own_name_on_connection(m_connection.get(), m_instanceId.ascii().data(), G_BUS_NAME_OWNER_FLAGS_NONE, nullptr, nullptr, this, nullptr);
    226222}
    227223
    228224MediaSessionGLib::~MediaSessionGLib()
    229225{
     226    if (m_connection) {
     227        if (m_rootRegistrationId && !g_dbus_connection_unregister_object(m_connection.get(), m_rootRegistrationId))
     228            g_warning("Unable to unregister MPRIS D-Bus object.");
     229        if (m_playerRegistrationId && !g_dbus_connection_unregister_object(m_connection.get(), m_playerRegistrationId))
     230            g_warning("Unable to unregister MPRIS D-Bus player object.");
     231    }
    230232    if (m_ownerId)
    231233        g_bus_unown_name(m_ownerId);
    232 }
    233 
    234 void MediaSessionGLib::nameLost(GDBusConnection* connection)
    235 {
    236     if (UNLIKELY(!m_connection)) {
    237         g_warning("Unable to acquire MPRIS D-Bus session ownership for name %s", m_instanceId.ascii().data());
    238         return;
    239     }
    240 
    241     m_connection = nullptr;
    242     if (!m_rootRegistrationId)
    243         return;
    244 
    245     if (g_dbus_connection_unregister_object(connection, m_rootRegistrationId))
    246         m_rootRegistrationId = 0;
    247     else
    248         g_warning("Unable to unregister MPRIS D-Bus object.");
    249 
    250     if (!m_playerRegistrationId)
    251         return;
    252 
    253     if (g_dbus_connection_unregister_object(connection, m_playerRegistrationId))
    254         m_playerRegistrationId = 0;
    255     else
    256         g_warning("Unable to unregister MPRIS D-Bus player object.");
    257234}
    258235
  • trunk/Source/WebCore/platform/audio/glib/MediaSessionGLib.h

    r283437 r285802  
    4545    GVariant* canSeekAsGVariant();
    4646
    47     void nameLost(GDBusConnection*);
    4847    void emitPositionChanged(double time);
    4948    void updateNowPlaying(NowPlayingInfo&);
Note: See TracChangeset for help on using the changeset viewer.