@@ -3124,7 +3124,9 @@ public boolean removeSession(Long sessionId) {
31243124 int location = sessionIds .indexOf (sessionId );
31253125 if (location >= 0 ) {
31263126 Long removedSessionId = sessionIds .remove (location );
3127- registeredTransports .remove (sessionId .intValue ());
3127+ synchronized (TRANSPORT_LOCK ) {
3128+ registeredTransports .remove (sessionId .intValue ());
3129+ }
31283130 return removedSessionId != null ;
31293131 } else {
31303132 return false ;
@@ -3262,11 +3264,21 @@ protected void unregisterAllTransports(int sessionId) {
32623264 * @return
32633265 */
32643266 private TransportType getCompatPrimaryTransport () {
3265- if (this .registeredTransports != null && this .registeredTransports .size () > 0 ) {
3266- List <TransportType > transportTypes = this .registeredTransports .valueAt (0 );
3267- if (transportTypes != null ) {
3268- if (transportTypes .get (0 ) != null ) {
3269- return transportTypes .get (0 );
3267+ synchronized (TRANSPORT_LOCK ) {
3268+ if (this .registeredTransports != null && this .registeredTransports .size () > 0 ) {
3269+ Object obj = this .registeredTransports .valueAt (0 );
3270+ //Lint shows to ignore this call, but there are crash logs that show otherwise
3271+ if (obj != null && obj instanceof List ) {
3272+ try {
3273+ List <TransportType > transportTypes = (List <TransportType >) obj ;
3274+ if (transportTypes != null ) {
3275+ if (transportTypes .get (0 ) != null ) {
3276+ return transportTypes .get (0 );
3277+ }
3278+ }
3279+ } catch (ClassCastException e ) {
3280+ DebugTool .logError (TAG , "Unable to cast transport list" , e );
3281+ }
32703282 }
32713283 }
32723284 }
0 commit comments