summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBilal <bilal@Bilals-MBP.localdomain>2018-03-12 09:23:39 -0400
committerBilal <bilal@Bilals-MBP.localdomain>2018-03-12 09:23:39 -0400
commita0227b8429a1b80ec994326b358df475cd74ba81 (patch)
tree5819bcc79aece77992abbc2f7d1f2659a85e2a81
parent59d51cb2fbbd7ad78207797076c9047f4b7d458f (diff)
downloadsdl_android-bugfix/issue_570.tar.gz
Make sure that the session is still registered before modifying itbugfix/issue_570
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlConnection.java17
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java10
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java6
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/transport/USBTransport.java29
4 files changed, 26 insertions, 36 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlConnection.java b/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlConnection.java
index 21b1eb080..86ee4247d 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlConnection.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlConnection.java
@@ -14,7 +14,6 @@ import com.smartdevicelink.protocol.ProtocolMessage;
import com.smartdevicelink.protocol.SdlPacket;
import com.smartdevicelink.protocol.WiProProtocol;
import com.smartdevicelink.protocol.enums.SessionType;
-import com.smartdevicelink.proxy.SdlProxyBase;
import com.smartdevicelink.transport.BTTransport;
import com.smartdevicelink.transport.BTTransportConfig;
import com.smartdevicelink.transport.BaseTransportConfig;
@@ -30,6 +29,8 @@ import com.smartdevicelink.transport.USBTransport;
import com.smartdevicelink.transport.USBTransportConfig;
import com.smartdevicelink.transport.enums.TransportType;
+
+
public class SdlConnection implements IProtocolListener, ITransportListener {
private static final String TAG = "SdlConnection";
@@ -121,7 +122,7 @@ public class SdlConnection implements IProtocolListener, ITransportListener {
{
_transport = new TCPTransport((TCPTransportConfig) transportConfig, this);
} else if (transportConfig.getTransportType() == TransportType.USB) {
- _transport = USBTransport.getInstance((USBTransportConfig) transportConfig, this);
+ _transport = new USBTransport((USBTransportConfig) transportConfig, this);
}
}
@@ -308,6 +309,7 @@ public class SdlConnection implements IProtocolListener, ITransportListener {
}
}
void registerSession(SdlSession registerListener) throws SdlException {
+ registerListener.setIsRegistered(true);
boolean didAdd = listenerList.addIfAbsent(registerListener);
if (!this.getIsConnected()) {
this.startTransport();
@@ -325,6 +327,7 @@ public class SdlConnection implements IProtocolListener, ITransportListener {
}
public void unregisterSession(SdlSession registerListener) {
+ registerListener.setIsRegistered(false);
boolean didRemove = listenerList.remove(registerListener);
if(didRemove && _transport !=null && _transport.getTransportType()== TransportType.MULTIPLEX){ //If we're connected we can request the extra session now
((MultiplexTransport)_transport).removeSession(registerListener.getSessionId());
@@ -387,14 +390,14 @@ public class SdlConnection implements IProtocolListener, ITransportListener {
cachedMultiConfig = null; //It should now be consumed
}
- // If proxy disposing is in progress, then we don't have to worry about the listenerList
- // because proxy.dispose() will take care of the sessions
- if (!SdlProxyBase._disposing) {
- for (SdlSession session : listenerList) {
- session.onTransportError(info, e);
+ for (SdlSession session : listenerList) {
+ if (session == null || !session.getIsRegistered()){
+ continue;
}
+ session.onTransportError(info, e);
}
+
}
@Override
diff --git a/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java b/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java
index 20bcc0cc8..613af23c8 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java
@@ -65,8 +65,8 @@ public class SdlSession implements ISdlConnectionListener, IHeartbeatMonitorList
private HashMap<SessionType, CopyOnWriteArrayList<ISdlServiceListener>> serviceListeners;
private VideoStreamingParameters desiredVideoParams = null;
private VideoStreamingParameters acceptedVideoParams = null;
+ private boolean isRegistered = false;
-
public static SdlSession createSession(byte wiproVersion, ISdlConnectionListener listener, BaseTransportConfig btConfig) {
SdlSession session = new SdlSession();
@@ -135,6 +135,14 @@ public class SdlSession implements ISdlConnectionListener, IHeartbeatMonitorList
}
}
+ public boolean getIsRegistered() {
+ return isRegistered;
+ }
+
+ public void setIsRegistered(boolean isRegistered) {
+ this.isRegistered = isRegistered;
+ }
+
public void close() {
if (sdlSecurity != null)
{
diff --git a/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java b/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
index cbfc254f6..f32f42c58 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
@@ -155,7 +155,6 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
private boolean pcmServiceEndResponse = false;
private boolean rpcProtectedResponseReceived = false;
private boolean rpcProtectedStartResponse = false;
- public static volatile boolean _disposing = false;
// Device Info for logging
private TraceDeviceInfo _traceDeviceInterrogator = null;
@@ -372,7 +371,7 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
if(SdlConnection.isLegacyModeEnabled()){
cycleProxy(SdlDisconnectedReason.LEGACY_BLUETOOTH_MODE_ENABLED);
- }else{
+ }else if (sdlSession != null && sdlSession.getIsRegistered()){
cycleProxy(SdlDisconnectedReason.TRANSPORT_ERROR);
}
} else {
@@ -1428,8 +1427,6 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
*/
public void dispose() throws SdlException
{
- _disposing = true;
-
if (_proxyDisposed) {
throw new SdlException("This object has been disposed, it is no long capable of executing methods.", SdlExceptionCause.SDL_PROXY_DISPOSED);
}
@@ -1472,7 +1469,6 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
} finally {
SdlTrace.logProxyEvent("SdlProxy disposed.", SDL_LIB_TRACE_KEY);
- _disposing = false;
}
} // end-method
diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/USBTransport.java b/sdl_android/src/main/java/com/smartdevicelink/transport/USBTransport.java
index 667f3aa45..e77647812 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/transport/USBTransport.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/transport/USBTransport.java
@@ -162,10 +162,7 @@ public class USBTransport extends SdlTransport {
* @see USBTransportReader
*/
private Thread mReaderThread = null;
- /**
- * Reference to the singleton instance of the class.
- */
- private static USBTransport instance = null;
+
/**
* Constructs the USBTransport instance.
*
@@ -173,24 +170,11 @@ public class USBTransport extends SdlTransport {
* @param transportListener Listener that gets notified on different
* transport events
*/
- private USBTransport(USBTransportConfig usbTransportConfig,
+ public USBTransport(USBTransportConfig usbTransportConfig,
ITransportListener transportListener) {
super(transportListener);
this.mConfig = usbTransportConfig;
- registerReciever();
- }
- /**
- * Get the singlton instance of the class.
- *
- * @param usbTransportConfig Config object for the USB transport
- * @param transportListener Listener that gets notified on different
- * transport events
- */
- public static USBTransport getInstance(USBTransportConfig usbTransportConfig, ITransportListener transportListener){
- if (instance == null){
- instance = new USBTransport(usbTransportConfig, transportListener);
- }
- return instance;
+ registerReciever();
}
/**
@@ -368,7 +352,9 @@ public class USBTransport extends SdlTransport {
* @param ex Disconnect exception, if any
*/
private synchronized void disconnect(String msg, Exception ex) {
-
+
+ stopReaderThread();
+
// If already disconnecting, return
if (_disconnecting) {
// No need to recursively call
@@ -386,13 +372,10 @@ public class USBTransport extends SdlTransport {
logI("Disconnect from state " + getState() + "; message: " +
msg + "; exception: " + ex);
setState(State.IDLE);
-
SdlTrace.logTransportEvent(TAG + ": disconnect", null,
InterfaceActivityDirection.None, null, 0,
SDL_LIB_TRACE_KEY);
- stopReaderThread();
-
if (mAccessory != null) {
if (mOutputStream != null) {
try {