From db58c8691d9a0d6f9ee9226658b0fd6508a52c12 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Thu, 26 Apr 2018 08:59:00 +0200 Subject: Add missing emission of readChannelFinished() This fixes the problem for all supported platforms. Task-number: QTBUG-67672 Change-Id: I9cecfbe8a73df46070293eba1870ea3bee738b7b Reviewed-by: Oliver Wolff Reviewed-by: Timur Pocheptsov --- src/bluetooth/qbluetoothsocket.cpp | 2 ++ src/bluetooth/qbluetoothsocket_android.cpp | 1 + src/bluetooth/qbluetoothsocket_osx.mm | 3 +++ 3 files changed, 6 insertions(+) diff --git a/src/bluetooth/qbluetoothsocket.cpp b/src/bluetooth/qbluetoothsocket.cpp index c5b0f7d3..1ad3ffc2 100644 --- a/src/bluetooth/qbluetoothsocket.cpp +++ b/src/bluetooth/qbluetoothsocket.cpp @@ -742,6 +742,7 @@ void QBluetoothSocket::abort() #ifndef QT_ANDROID_BLUETOOTH //Android closes when the Java event loop comes around setSocketState(QBluetoothSocket::UnconnectedState); + emit readChannelFinished(); emit disconnected(); #endif } @@ -827,6 +828,7 @@ void QBluetoothSocket::close() #ifndef QT_ANDROID_BLUETOOTH //Android closes when the Java event loop comes around setSocketState(UnconnectedState); + emit readChannelFinished(); emit disconnected(); #endif } diff --git a/src/bluetooth/qbluetoothsocket_android.cpp b/src/bluetooth/qbluetoothsocket_android.cpp index d0b901ae..a70b95a2 100644 --- a/src/bluetooth/qbluetoothsocket_android.cpp +++ b/src/bluetooth/qbluetoothsocket_android.cpp @@ -779,6 +779,7 @@ void QBluetoothSocketPrivate::inputThreadError(int errorCode) q->setSocketState(QBluetoothSocket::UnconnectedState); q->setOpenMode(QIODevice::NotOpen); + emit q->readChannelFinished(); emit q->disconnected(); } diff --git a/src/bluetooth/qbluetoothsocket_osx.mm b/src/bluetooth/qbluetoothsocket_osx.mm index de7e2120..dec542dd 100644 --- a/src/bluetooth/qbluetoothsocket_osx.mm +++ b/src/bluetooth/qbluetoothsocket_osx.mm @@ -351,6 +351,7 @@ void QBluetoothSocketPrivate::channelClosed() if (!isConnecting) { q_ptr->setSocketState(QBluetoothSocket::UnconnectedState); q_ptr->setOpenMode(QIODevice::NotOpen); + emit q_ptr->readChannelFinished(); emit q_ptr->disconnected(); } else { state = QBluetoothSocket::UnconnectedState; @@ -638,6 +639,7 @@ void QBluetoothSocket::abort() d_ptr->abort(); setSocketState(QBluetoothSocket::UnconnectedState); + emit readChannelFinished(); emit disconnected(); } @@ -726,6 +728,7 @@ void QBluetoothSocket::close() d_ptr->close(); setSocketState(UnconnectedState); + emit readChannelFinished(); emit disconnected(); } -- cgit v1.2.3 From 8bf0702792f2d41764e62b63432870fee6a9e9c7 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Mon, 30 Apr 2018 15:57:13 +0200 Subject: Make Adapter1.RemoveDevice() call async This function is called as part of QBluetoothLocalDevice::requestPairing(..., Unpaired). On heavy I/O systems this may be a rather slow function call. This patch ensures that the function is called asynchronously. Task-number: QTBUG-64735 Change-Id: I7e3b4ab3e9dca26a33af4d13bcc0ea64c44e1540 Reviewed-by: Oliver Wolff Reviewed-by: Denis Shienkov Reviewed-by: Alex Blasche --- src/bluetooth/qbluetoothlocaldevice_bluez.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp index 4eb3ca58..c247f679 100644 --- a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp @@ -529,16 +529,20 @@ void QBluetoothLocalDevicePrivate::processPairingBluez5(const QString &objectPat switch (target) { case QBluetoothLocalDevice::Unpaired: { delete pairingTarget; - pairingTarget = 0; + pairingTarget = nullptr; QDBusPendingReply<> removeReply = adapterBluez5->RemoveDevice(QDBusObjectPath(objectPath)); - removeReply.waitForFinished(); - - if (removeReply.isError()) - emit q->error(QBluetoothLocalDevice::PairingError); - else - emit q->pairingFinished(targetAddress, QBluetoothLocalDevice::Unpaired); + auto watcher = new QDBusPendingCallWatcher(removeReply, this); + connect(watcher, &QDBusPendingCallWatcher::finished, + this, [q, targetAddress](QDBusPendingCallWatcher* watcher){ + QDBusPendingReply<> reply = *watcher; + if (reply.isError()) + emit q->error(QBluetoothLocalDevice::PairingError); + else + emit q->pairingFinished(targetAddress, QBluetoothLocalDevice::Unpaired); + watcher->deleteLater(); + }); break; } case QBluetoothLocalDevice::Paired: -- cgit v1.2.3