From b890ed527b6951116c50662562e2ddc7e0dae9eb Mon Sep 17 00:00:00 2001 From: Ibrahn Sahir Date: Fri, 13 Jul 2018 13:30:50 +0100 Subject: [PATCH] fixed branch on uninit and data race in editor android device polling Initialised relevant variables before stating thread, to prevent a branch on uninitialised data. Fixed race condition in polling that could miss a device change. (cherry picked from commit fe4265ad463e8fdf9bd1f8677d5e697b6ee090e0) --- platform/android/export/export.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 1a5a62972b6..e1ad86e772a 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -228,7 +228,7 @@ class EditorExportAndroid : public EditorExportPlatform { }; Vector devices; - bool devices_changed; + volatile bool devices_changed; Mutex *device_lock; Thread *device_thread; volatile bool quit_request; @@ -1156,7 +1156,10 @@ public: virtual bool poll_devices() { bool dc = devices_changed; - devices_changed = false; + if (dc) { + // don't clear unless we're reporting true, to avoid race + devices_changed = false; + } return dc; } @@ -1859,9 +1862,9 @@ public: run_icon->create_from_image(img); device_lock = Mutex::create(); - device_thread = Thread::create(_device_poll_thread, this); devices_changed = true; quit_request = false; + device_thread = Thread::create(_device_poll_thread, this); } ~EditorExportAndroid() {