DrmManager: check drm.service.enabled in init
Bug: 170678524
Test: atest DRMTest#testForwardLockAccess
Change-Id: Ifaee3f867988c0e22046c18e087bd8bd26bb585d
diff --git a/drm/drmserver/drmserver.rc b/drm/drmserver/drmserver.rc
index de46fb9..eb176c1 100644
--- a/drm/drmserver/drmserver.rc
+++ b/drm/drmserver/drmserver.rc
@@ -1,5 +1,12 @@
service drm /system/bin/drmserver
+ disabled
class main
user drm
group drm system inet drmrpc readproc
writepid /dev/cpuset/foreground/tasks
+
+on property:drm.service.enabled=true
+ start drm
+
+on property:drm.service.enabled=1
+ start drm
diff --git a/drm/libdrmframework/DrmManagerClientImpl.cpp b/drm/libdrmframework/DrmManagerClientImpl.cpp
index b0a441b..38591bc 100644
--- a/drm/libdrmframework/DrmManagerClientImpl.cpp
+++ b/drm/libdrmframework/DrmManagerClientImpl.cpp
@@ -52,25 +52,22 @@
const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() {
Mutex::Autolock lock(sMutex);
if (NULL == sDrmManagerService.get()) {
- char value[PROPERTY_VALUE_MAX];
- if (property_get("drm.service.enabled", value, NULL) == 0) {
- // Drm is undefined for this device
- return sDrmManagerService;
- }
-
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
- do {
+ for(int i = 0; i < 10; i++) {
binder = sm->getService(String16("drm.drmManager"));
if (binder != 0) {
break;
}
- ALOGW("DrmManagerService not published, waiting...");
+ ALOGW("DrmManagerService not published, waiting... %d", i);
struct timespec reqt;
reqt.tv_sec = 0;
reqt.tv_nsec = 500000000; //0.5 sec
nanosleep(&reqt, NULL);
- } while (true);
+ }
+ if (binder == NULL) {
+ return sDrmManagerService;
+ }
if (NULL == sDeathNotifier.get()) {
sDeathNotifier = new DeathNotifier();
}