@@ -111,6 +111,8 @@ void DrmPlugin::initProperties() {
111111// The content in this secure stop is implementation dependent, the clearkey
112112// secureStop does not serve as a reference implementation.
113113void DrmPlugin::installSecureStop (const hidl_vec<uint8_t >& sessionId) {
114+ Mutex::Autolock lock (mSecureStopLock );
115+
114116 ClearkeySecureStop clearkeySecureStop;
115117 clearkeySecureStop.id = uint32ToVector (++mNextSecureStopId );
116118 clearkeySecureStop.data .assign (sessionId.begin (), sessionId.end ());
@@ -744,6 +746,7 @@ Return<void> DrmPlugin::getOfflineLicenseState(const KeySetId& keySetId,
744746}
745747
746748Return<void > DrmPlugin::getSecureStops (getSecureStops_cb _hidl_cb) {
749+ mSecureStopLock .lock ();
747750 std::vector<SecureStop> stops;
748751 for (auto itr = mSecureStops .begin (); itr != mSecureStops .end (); ++itr) {
749752 ClearkeySecureStop clearkeyStop = itr->second ;
@@ -755,26 +758,32 @@ Return<void> DrmPlugin::getSecureStops(getSecureStops_cb _hidl_cb) {
755758 stop.opaqueData = toHidlVec (stopVec);
756759 stops.push_back (stop);
757760 }
761+ mSecureStopLock .unlock ();
762+
758763 _hidl_cb (Status::OK , stops);
759764 return Void ();
760765}
761766
762767Return<void > DrmPlugin::getSecureStop (const hidl_vec<uint8_t >& secureStopId,
763768 getSecureStop_cb _hidl_cb) {
764- SecureStop stop;
769+ std::vector<uint8_t > stopVec;
770+
771+ mSecureStopLock .lock ();
765772 auto itr = mSecureStops .find (toVector (secureStopId));
766773 if (itr != mSecureStops .end ()) {
767774 ClearkeySecureStop clearkeyStop = itr->second ;
768- std::vector<uint8_t > stopVec;
769775 stopVec.insert (stopVec.end (), clearkeyStop.id .begin (), clearkeyStop.id .end ());
770776 stopVec.insert (stopVec.end (), clearkeyStop.data .begin (), clearkeyStop.data .end ());
777+ }
778+ mSecureStopLock .unlock ();
771779
780+ SecureStop stop;
781+ if (!stopVec.empty ()) {
772782 stop.opaqueData = toHidlVec (stopVec);
773783 _hidl_cb (Status::OK , stop);
774784 } else {
775785 _hidl_cb (Status::BAD_VALUE , stop);
776786 }
777-
778787 return Void ();
779788}
780789
@@ -787,10 +796,12 @@ Return<Status> DrmPlugin::releaseAllSecureStops() {
787796}
788797
789798Return<void > DrmPlugin::getSecureStopIds (getSecureStopIds_cb _hidl_cb) {
799+ mSecureStopLock .lock ();
790800 std::vector<SecureStopId> ids;
791801 for (auto itr = mSecureStops .begin (); itr != mSecureStops .end (); ++itr) {
792802 ids.push_back (itr->first );
793803 }
804+ mSecureStopLock .unlock ();
794805
795806 _hidl_cb (Status::OK , toHidlVec (ids));
796807 return Void ();
@@ -856,13 +867,17 @@ Return<Status> DrmPlugin::releaseSecureStops(const SecureStopRelease& ssRelease)
856867}
857868
858869Return<Status> DrmPlugin::removeSecureStop (const hidl_vec<uint8_t >& secureStopId) {
870+ Mutex::Autolock lock (mSecureStopLock );
871+
859872 if (1 != mSecureStops .erase (toVector (secureStopId))) {
860873 return Status::BAD_VALUE ;
861874 }
862875 return Status::OK ;
863876}
864877
865878Return<Status> DrmPlugin::removeAllSecureStops () {
879+ Mutex::Autolock lock (mSecureStopLock );
880+
866881 mSecureStops .clear ();
867882 mNextSecureStopId = kSecureStopIdStart ;
868883 return Status::OK ;
0 commit comments