diff options
author | Khalid Zubair <kzubair@cyngn.com> | 2015-11-30 18:29:29 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2015-12-01 12:39:56 -0800 |
commit | 055bf375987b6387a3afbda5a51bf6231e42aa32 (patch) | |
tree | 1e6ba044f4340ddcd91831f15ac79878964a840b /services/java | |
parent | 9b446034d3d6ff09402f6593fc8506999546daa4 (diff) | |
download | frameworks_base-055bf375987b6387a3afbda5a51bf6231e42aa32.zip frameworks_base-055bf375987b6387a3afbda5a51bf6231e42aa32.tar.gz frameworks_base-055bf375987b6387a3afbda5a51bf6231e42aa32.tar.bz2 |
gesture: fix possible race during initialization
It's possible for binder events to fire before mDisplayObserver is
setup. Take mLock during the setup phase to prevent access to
mDisplayObserver until setup completes.
SAMBAR-1121
Change-Id: I8c137ead7d0f956faca134be565b6db1da680f76
Diffstat (limited to 'services/java')
-rw-r--r-- | services/java/com/android/server/gesture/EdgeGestureService.java | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/services/java/com/android/server/gesture/EdgeGestureService.java b/services/java/com/android/server/gesture/EdgeGestureService.java index c023294..0581831 100644 --- a/services/java/com/android/server/gesture/EdgeGestureService.java +++ b/services/java/com/android/server/gesture/EdgeGestureService.java @@ -185,19 +185,21 @@ public class EdgeGestureService extends IEdgeGestureService.Stub { public void systemReady() { if (DEBUG) Slog.d(TAG, "Starting the edge gesture capture thread ..."); - mHandlerThread.start(); - mHandler = new H(mHandlerThread.getLooper()); - mHandler.post(new Runnable() { - @Override - public void run() { - android.os.Process.setThreadPriority( - android.os.Process.THREAD_PRIORITY_FOREGROUND); - android.os.Process.setCanSelfBackground(false); - } - }); - mDisplayObserver = new DisplayObserver(mContext, mHandler); - // check if anyone registered during startup - mHandler.sendEmptyMessage(MSG_UPDATE_SERVICE); + synchronized (mLock) { + mHandlerThread.start(); + mHandler = new H(mHandlerThread.getLooper()); + mHandler.post(new Runnable() { + @Override + public void run() { + android.os.Process.setThreadPriority( + android.os.Process.THREAD_PRIORITY_FOREGROUND); + android.os.Process.setCanSelfBackground(false); + } + }); + mDisplayObserver = new DisplayObserver(mContext, mHandler); + // check if anyone registered during startup + mHandler.sendEmptyMessage(MSG_UPDATE_SERVICE); + } } |