summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Marchenko <k.marchenko@readyforsky.com>2016-12-09 18:58:35 +0300
committerKonstantin Ritt <ritt.ks@gmail.com>2019-01-25 12:57:08 +0000
commit1d964be81b0081d2ccdbf5c9a875672f447b5977 (patch)
tree716fda6116f8009ad1f9ea9bfc20d3e14357540a
parentc6cd43df27eb967404c10c1216c0f186fc03b226 (diff)
LE/Android: fix crash when destroying DiscoveryAgent during scan
happens due to accessing already destroyed receiver from the queued call Change-Id: Ibc4a9abbb8c00ef9c8985f481b70db36fa508df8 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r--src/bluetooth/android/jni_android.cpp3
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/bluetooth/android/jni_android.cpp b/src/bluetooth/android/jni_android.cpp
index 176416c8..0688c869 100644
--- a/src/bluetooth/android/jni_android.cpp
+++ b/src/bluetooth/android/jni_android.cpp
@@ -193,6 +193,9 @@ static void QtBluetoothInputStreamThread_readyData(JNIEnv */*env*/, jobject /*ja
void QtBluetoothLE_leScanResult(JNIEnv *env, jobject, jlong qtObject, jobject bluetoothDevice,
jint rssi, jbyteArray scanRecord)
{
+ if (Q_UNLIKELY(qtObject == 0))
+ return;
+
reinterpret_cast<AndroidBroadcastReceiver*>(qtObject)->onReceiveLeScan(
env, bluetoothDevice, rssi,
scanRecord);
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
index 6369cedb..443be14d 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
@@ -88,6 +88,9 @@ QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
if (m_active != NoScanActive)
stop();
+ if (leScanner.isValid())
+ leScanner.setField<jlong>("qtObject", reinterpret_cast<jlong>(nullptr));
+
if (receiver) {
receiver->unregisterReceiver();
delete receiver;