Loading services/audioflinger/AudioFlinger.cpp +2 −9 Original line number Original line Diff line number Diff line Loading @@ -466,15 +466,8 @@ void AudioFlinger::dumpPermissionDenial(int fd, const Vector<String16>& args __u bool AudioFlinger::dumpTryLock(Mutex& mutex) bool AudioFlinger::dumpTryLock(Mutex& mutex) { { bool locked = false; status_t err = mutex.timedLock(kDumpLockTimeoutNs); for (int i = 0; i < kDumpLockRetries; ++i) { return err == NO_ERROR; if (mutex.tryLock() == NO_ERROR) { locked = true; break; } usleep(kDumpLockSleepUs); } return locked; } } status_t AudioFlinger::dump(int fd, const Vector<String16>& args) status_t AudioFlinger::dump(int fd, const Vector<String16>& args) Loading services/audioflinger/AudioFlinger.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -431,8 +431,7 @@ private: static uint32_t mScreenState; static uint32_t mScreenState; // Internal dump utilities. // Internal dump utilities. static const int kDumpLockRetries = 50; static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND; static const int kDumpLockSleepUs = 20000; static bool dumpTryLock(Mutex& mutex); static bool dumpTryLock(Mutex& mutex); void dumpPermissionDenial(int fd, const Vector<String16>& args); void dumpPermissionDenial(int fd, const Vector<String16>& args); void dumpClients(int fd, const Vector<String16>& args); void dumpClients(int fd, const Vector<String16>& args); Loading services/audiopolicy/service/AudioPolicyService.cpp +8 −15 Original line number Original line Diff line number Diff line Loading @@ -22,8 +22,9 @@ #define __STDINT_LIMITS #define __STDINT_LIMITS #define __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS #include <stdint.h> #include <stdint.h> #include <sys/time.h> #include <sys/time.h> #include <audio_utils/clock.h> #include <binder/IServiceManager.h> #include <binder/IServiceManager.h> #include <utils/Log.h> #include <utils/Log.h> #include <cutils/properties.h> #include <cutils/properties.h> Loading @@ -48,8 +49,7 @@ namespace android { static const char kDeadlockedString[] = "AudioPolicyService may be deadlocked\n"; static const char kDeadlockedString[] = "AudioPolicyService may be deadlocked\n"; static const char kCmdDeadlockedString[] = "AudioPolicyService command thread may be deadlocked\n"; static const char kCmdDeadlockedString[] = "AudioPolicyService command thread may be deadlocked\n"; static const int kDumpLockRetries = 50; static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND; static const int kDumpLockSleepUs = 20000; static const nsecs_t kAudioCommandTimeoutNs = seconds(3); // 3 seconds static const nsecs_t kAudioCommandTimeoutNs = seconds(3); // 3 seconds Loading Loading @@ -376,17 +376,10 @@ void AudioPolicyService::binderDied(const wp<IBinder>& who) { IPCThreadState::self()->getCallingPid()); IPCThreadState::self()->getCallingPid()); } } static bool tryLock(Mutex& mutex) static bool dumpTryLock(Mutex& mutex) { { bool locked = false; status_t err = mutex.timedLock(kDumpLockTimeoutNs); for (int i = 0; i < kDumpLockRetries; ++i) { return err == NO_ERROR; if (mutex.tryLock() == NO_ERROR) { locked = true; break; } usleep(kDumpLockSleepUs); } return locked; } } status_t AudioPolicyService::dumpInternals(int fd) status_t AudioPolicyService::dumpInternals(int fd) Loading Loading @@ -627,7 +620,7 @@ status_t AudioPolicyService::dump(int fd, const Vector<String16>& args __unused) if (!dumpAllowed()) { if (!dumpAllowed()) { dumpPermissionDenial(fd); dumpPermissionDenial(fd); } else { } else { bool locked = tryLock(mLock); bool locked = dumpTryLock(mLock); if (!locked) { if (!locked) { String8 result(kDeadlockedString); String8 result(kDeadlockedString); write(fd, result.string(), result.size()); write(fd, result.string(), result.size()); Loading Loading @@ -1260,7 +1253,7 @@ status_t AudioPolicyService::AudioCommandThread::dump(int fd) result.append(buffer); result.append(buffer); write(fd, result.string(), result.size()); write(fd, result.string(), result.size()); bool locked = tryLock(mLock); bool locked = dumpTryLock(mLock); if (!locked) { if (!locked) { String8 result2(kCmdDeadlockedString); String8 result2(kCmdDeadlockedString); write(fd, result2.string(), result2.size()); write(fd, result2.string(), result2.size()); Loading services/soundtrigger/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ cc_library_shared { "libhardware", "libhardware", "libsoundtrigger", "libsoundtrigger", "libaudioclient", "libaudioclient", "libaudioutils", "libmediautils", "libmediautils", "libhwbinder", "libhwbinder", Loading services/soundtrigger/SoundTriggerHwService.cpp +6 −13 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <sys/types.h> #include <sys/types.h> #include <pthread.h> #include <pthread.h> #include <audio_utils/clock.h> #include <system/sound_trigger.h> #include <system/sound_trigger.h> #include <cutils/atomic.h> #include <cutils/atomic.h> #include <cutils/properties.h> #include <cutils/properties.h> Loading Loading @@ -146,20 +147,12 @@ status_t SoundTriggerHwService::setCaptureState(bool active) } } static const int kDumpLockRetries = 50; static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND; static const int kDumpLockSleep = 60000; static bool tryLock(Mutex& mutex) static bool dumpTryLock(Mutex& mutex) { { bool locked = false; status_t err = mutex.timedLock(kDumpLockTimeoutNs); for (int i = 0; i < kDumpLockRetries; ++i) { return err == NO_ERROR; if (mutex.tryLock() == NO_ERROR) { locked = true; break; } usleep(kDumpLockSleep); } return locked; } } status_t SoundTriggerHwService::dump(int fd, const Vector<String16>& args __unused) { status_t SoundTriggerHwService::dump(int fd, const Vector<String16>& args __unused) { Loading @@ -168,7 +161,7 @@ status_t SoundTriggerHwService::dump(int fd, const Vector<String16>& args __unus result.appendFormat("Permission Denial: can't dump SoundTriggerHwService"); result.appendFormat("Permission Denial: can't dump SoundTriggerHwService"); write(fd, result.string(), result.size()); write(fd, result.string(), result.size()); } else { } else { bool locked = tryLock(mServiceLock); bool locked = dumpTryLock(mServiceLock); // failed to lock - SoundTriggerHwService is probably deadlocked // failed to lock - SoundTriggerHwService is probably deadlocked if (!locked) { if (!locked) { result.append("SoundTriggerHwService may be deadlocked\n"); result.append("SoundTriggerHwService may be deadlocked\n"); Loading Loading
services/audioflinger/AudioFlinger.cpp +2 −9 Original line number Original line Diff line number Diff line Loading @@ -466,15 +466,8 @@ void AudioFlinger::dumpPermissionDenial(int fd, const Vector<String16>& args __u bool AudioFlinger::dumpTryLock(Mutex& mutex) bool AudioFlinger::dumpTryLock(Mutex& mutex) { { bool locked = false; status_t err = mutex.timedLock(kDumpLockTimeoutNs); for (int i = 0; i < kDumpLockRetries; ++i) { return err == NO_ERROR; if (mutex.tryLock() == NO_ERROR) { locked = true; break; } usleep(kDumpLockSleepUs); } return locked; } } status_t AudioFlinger::dump(int fd, const Vector<String16>& args) status_t AudioFlinger::dump(int fd, const Vector<String16>& args) Loading
services/audioflinger/AudioFlinger.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -431,8 +431,7 @@ private: static uint32_t mScreenState; static uint32_t mScreenState; // Internal dump utilities. // Internal dump utilities. static const int kDumpLockRetries = 50; static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND; static const int kDumpLockSleepUs = 20000; static bool dumpTryLock(Mutex& mutex); static bool dumpTryLock(Mutex& mutex); void dumpPermissionDenial(int fd, const Vector<String16>& args); void dumpPermissionDenial(int fd, const Vector<String16>& args); void dumpClients(int fd, const Vector<String16>& args); void dumpClients(int fd, const Vector<String16>& args); Loading
services/audiopolicy/service/AudioPolicyService.cpp +8 −15 Original line number Original line Diff line number Diff line Loading @@ -22,8 +22,9 @@ #define __STDINT_LIMITS #define __STDINT_LIMITS #define __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS #include <stdint.h> #include <stdint.h> #include <sys/time.h> #include <sys/time.h> #include <audio_utils/clock.h> #include <binder/IServiceManager.h> #include <binder/IServiceManager.h> #include <utils/Log.h> #include <utils/Log.h> #include <cutils/properties.h> #include <cutils/properties.h> Loading @@ -48,8 +49,7 @@ namespace android { static const char kDeadlockedString[] = "AudioPolicyService may be deadlocked\n"; static const char kDeadlockedString[] = "AudioPolicyService may be deadlocked\n"; static const char kCmdDeadlockedString[] = "AudioPolicyService command thread may be deadlocked\n"; static const char kCmdDeadlockedString[] = "AudioPolicyService command thread may be deadlocked\n"; static const int kDumpLockRetries = 50; static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND; static const int kDumpLockSleepUs = 20000; static const nsecs_t kAudioCommandTimeoutNs = seconds(3); // 3 seconds static const nsecs_t kAudioCommandTimeoutNs = seconds(3); // 3 seconds Loading Loading @@ -376,17 +376,10 @@ void AudioPolicyService::binderDied(const wp<IBinder>& who) { IPCThreadState::self()->getCallingPid()); IPCThreadState::self()->getCallingPid()); } } static bool tryLock(Mutex& mutex) static bool dumpTryLock(Mutex& mutex) { { bool locked = false; status_t err = mutex.timedLock(kDumpLockTimeoutNs); for (int i = 0; i < kDumpLockRetries; ++i) { return err == NO_ERROR; if (mutex.tryLock() == NO_ERROR) { locked = true; break; } usleep(kDumpLockSleepUs); } return locked; } } status_t AudioPolicyService::dumpInternals(int fd) status_t AudioPolicyService::dumpInternals(int fd) Loading Loading @@ -627,7 +620,7 @@ status_t AudioPolicyService::dump(int fd, const Vector<String16>& args __unused) if (!dumpAllowed()) { if (!dumpAllowed()) { dumpPermissionDenial(fd); dumpPermissionDenial(fd); } else { } else { bool locked = tryLock(mLock); bool locked = dumpTryLock(mLock); if (!locked) { if (!locked) { String8 result(kDeadlockedString); String8 result(kDeadlockedString); write(fd, result.string(), result.size()); write(fd, result.string(), result.size()); Loading Loading @@ -1260,7 +1253,7 @@ status_t AudioPolicyService::AudioCommandThread::dump(int fd) result.append(buffer); result.append(buffer); write(fd, result.string(), result.size()); write(fd, result.string(), result.size()); bool locked = tryLock(mLock); bool locked = dumpTryLock(mLock); if (!locked) { if (!locked) { String8 result2(kCmdDeadlockedString); String8 result2(kCmdDeadlockedString); write(fd, result2.string(), result2.size()); write(fd, result2.string(), result2.size()); Loading
services/soundtrigger/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ cc_library_shared { "libhardware", "libhardware", "libsoundtrigger", "libsoundtrigger", "libaudioclient", "libaudioclient", "libaudioutils", "libmediautils", "libmediautils", "libhwbinder", "libhwbinder", Loading
services/soundtrigger/SoundTriggerHwService.cpp +6 −13 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <sys/types.h> #include <sys/types.h> #include <pthread.h> #include <pthread.h> #include <audio_utils/clock.h> #include <system/sound_trigger.h> #include <system/sound_trigger.h> #include <cutils/atomic.h> #include <cutils/atomic.h> #include <cutils/properties.h> #include <cutils/properties.h> Loading Loading @@ -146,20 +147,12 @@ status_t SoundTriggerHwService::setCaptureState(bool active) } } static const int kDumpLockRetries = 50; static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND; static const int kDumpLockSleep = 60000; static bool tryLock(Mutex& mutex) static bool dumpTryLock(Mutex& mutex) { { bool locked = false; status_t err = mutex.timedLock(kDumpLockTimeoutNs); for (int i = 0; i < kDumpLockRetries; ++i) { return err == NO_ERROR; if (mutex.tryLock() == NO_ERROR) { locked = true; break; } usleep(kDumpLockSleep); } return locked; } } status_t SoundTriggerHwService::dump(int fd, const Vector<String16>& args __unused) { status_t SoundTriggerHwService::dump(int fd, const Vector<String16>& args __unused) { Loading @@ -168,7 +161,7 @@ status_t SoundTriggerHwService::dump(int fd, const Vector<String16>& args __unus result.appendFormat("Permission Denial: can't dump SoundTriggerHwService"); result.appendFormat("Permission Denial: can't dump SoundTriggerHwService"); write(fd, result.string(), result.size()); write(fd, result.string(), result.size()); } else { } else { bool locked = tryLock(mServiceLock); bool locked = dumpTryLock(mServiceLock); // failed to lock - SoundTriggerHwService is probably deadlocked // failed to lock - SoundTriggerHwService is probably deadlocked if (!locked) { if (!locked) { result.append("SoundTriggerHwService may be deadlocked\n"); result.append("SoundTriggerHwService may be deadlocked\n"); Loading