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

Changeset 243287 in webkit


Ignore:
Timestamp:
Mar 21, 2019, 5:14:04 AM (7 years ago)
Author:
cturner@igalia.com
Message:

[GStreamer][EME][Clearkey] Take a lock in keys() method
https://bugs.webkit.org/show_bug.cgi?id=195900

Reviewed by Xabier Rodriguez-Calvar.

This isn't ideal, since we're taking a lock for every frame to
decode. But there's no good way around it when keys can be
made unavailable at any time via an update() call, so we can't
cache key IDs in the decryptor.

Covered by test imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.https.html

  • platform/encryptedmedia/clearkey/CDMClearKey.cpp:

(WebCore::CDMInstanceClearKey::keys const): This method is called
from GStreamer's decode() method, which runs off the main thread,
therefore we need to take a lock.

  • platform/encryptedmedia/clearkey/CDMClearKey.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r243285 r243287  
     12019-03-21  Charlie Turner  <cturner@igalia.com>
     2
     3        [GStreamer][EME][Clearkey] Take a lock in keys() method
     4        https://bugs.webkit.org/show_bug.cgi?id=195900
     5
     6        Reviewed by Xabier Rodriguez-Calvar.
     7
     8        This isn't ideal, since we're taking a lock for every frame to
     9        decode. But there's no good way around it when keys can be
     10        made unavailable at any time via an update() call, so we can't
     11        cache key IDs in the decryptor.
     12
     13        Covered by test imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.https.html
     14
     15        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
     16        (WebCore::CDMInstanceClearKey::keys const): This method is called
     17        from GStreamer's decode() method, which runs off the main thread,
     18        therefore we need to take a lock.
     19        * platform/encryptedmedia/clearkey/CDMClearKey.h:
     20
    1212019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>
    222
  • trunk/Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp

    r243163 r243287  
    508508    // Return the keys of all sessions.
    509509    Vector<CDMInstanceClearKey::Key> allKeys { };
     510    auto locker = holdLock(m_keysMutex);
    510511    size_t initialCapacity = 0;
    511512    for (auto& key : ClearKeyState::singleton().keys().values())
  • trunk/Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h

    r239427 r243287  
    9898
    9999    const Vector<Key> keys() const;
     100
     101private:
     102    mutable Lock m_keysMutex;
    100103};
    101104
Note: See TracChangeset for help on using the changeset viewer.