summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Heike <t.heike@codeelements.de>2018-03-12 11:15:16 +0100
committerThomas Heike <t.heike@codeelements.de>2018-03-12 11:15:16 +0100
commiteaf7d56606340599f80d8cc3753df215593a7ad8 (patch)
tree6f56b21a72f50d417e20500c0753519180b3115f
parent33c2c9fdedf5d4b30b77b651ebe98d18fe54f1a6 (diff)
downloadsdl_android-eaf7d56606340599f80d8cc3753df215593a7ad8.tar.gz
#480 fixed deadlock when exception is thrown in BTTransport.disconnect
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/transport/BTTransport.java18
1 files changed, 11 insertions, 7 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/BTTransport.java b/sdl_android/src/main/java/com/smartdevicelink/transport/BTTransport.java
index 526d2226d..ffa9317a1 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/transport/BTTransport.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/transport/BTTransport.java
@@ -46,6 +46,8 @@ public class BTTransport extends SdlTransport {
// Boolean to monitor if the transport is in a disconnecting state
private boolean _disconnecting = false;
+
+ private final Object DISCONNECT_LOCK = new Object();
public BTTransport(ITransportListener transportListener) {
super(transportListener);
@@ -229,13 +231,15 @@ public class BTTransport extends SdlTransport {
* @param msg
* @param ex
*/
- private synchronized void disconnect(String msg, Exception ex) {
- // If already disconnecting, return
- if (_disconnecting) {
- // No need to recursively call
- return;
- }
- _disconnecting = true;
+ private void disconnect(String msg, Exception ex) {
+ synchronized(DISCONNECT_LOCK) {
+ // If already disconnecting, return
+ if (_disconnecting) {
+ // No need to recursively call
+ return;
+ }
+ _disconnecting = true;
+ }
String disconnectMsg = (msg == null ? "" : msg);
if (ex != null) {