Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java(Android). Fatal Exception: java.lang.RuntimeException. Connection is not active. #29457

Closed
SergeyKharuk opened this issue Jan 20, 2021 · 8 comments
Labels
area-signalr Includes: SignalR clients and servers investigate Needs: Attention 👋 This issue needs the attention of a contributor, typically because the OP has provided an update.
Milestone

Comments

@SergeyKharuk
Copy link

Hello.
We have in production an Android app that uses 'com.microsoft.signalr:signalr:5.0.1' for socket connection.
The app was received few weird crashes.
The following stacktrace of different crashes is taken from firebase crashlytics:

  1. Fatal Exception: java.lang.RuntimeException: Connection is not active. at com.microsoft.signalr.HubConnection$ReconnectingConnectionState.getConnectionStateUnsynchronized(HubConnection.java:1484) at com.microsoft.signalr.HubConnection.stopConnection(HubConnection.java:522) at com.microsoft.signalr.HubConnection.lambda$start$6(HubConnection.java:279) at com.microsoft.signalr.HubConnection.lambda$start$6$HubConnection(HubConnection.java) at com.microsoft.signalr.-$$Lambda$HubConnection$EkdUEf1TbIWyqrPvoiabHmwDEmY.invoke(-.java:2) at com.microsoft.signalr.WebSocketTransport.onClose(WebSocketTransport.java:90) at com.microsoft.signalr.WebSocketTransport.lambda$start$1(WebSocketTransport.java:55) at com.microsoft.signalr.WebSocketTransport.lambda$start$1$WebSocketTransport(WebSocketTransport.java) at com.microsoft.signalr.-$$Lambda$WebSocketTransport$fejcvJEcEEhKZWxrg8q1qfE4F-g.invoke(-.java:2) at com.microsoft.signalr.OkHttpWebSocketWrapper$SignalRWebSocketListener.onFailure(OkHttpWebSocketWrapper.java:148) at okhttp3.internal.ws.RealWebSocket.failWebSocket(RealWebSocket.java:592) at okhttp3.internal.ws.RealWebSocket$WriterTask.runOnce(RealWebSocket.java:622) at okhttp3.internal.concurrent.TaskRunner.runTask(TaskRunner.java:116) at okhttp3.internal.concurrent.TaskRunner.access$getLogger$cp(TaskRunner.java:42) at okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.java:65) at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:929)

  2. Fatal Exception: java.lang.RuntimeException: The HubConnection failed to transition from the 'CONNECTED' state to the 'DISCONNECTED' state because it was actually in the 'DISCONNECTED' state. at com.microsoft.signalr.HubConnection$ReconnectingConnectionState.changeState(HubConnection.java:61) at com.microsoft.signalr.HubConnection.stopConnection(HubConnection.java:76) at com.microsoft.signalr.HubConnection.lambda$start$6(HubConnection.java) at com.microsoft.signalr.HubConnection.lambda$start$6$HubConnection(HubConnection.java) at com.microsoft.signalr.-$$Lambda$HubConnection$EkdUEf1TbIWyqrPvoiabHmwDEmY.invoke(-.java:2) at com.microsoft.signalr.WebSocketTransport.onClose(WebSocketTransport.java:24) at com.microsoft.signalr.WebSocketTransport.lambda$start$1(WebSocketTransport.java:4) at com.microsoft.signalr.WebSocketTransport.lambda$start$1$WebSocketTransport(WebSocketTransport.java) at com.microsoft.signalr.-$$Lambda$WebSocketTransport$fejcvJEcEEhKZWxrg8q1qfE4F-g.invoke(-.java:2) at com.microsoft.signalr.OkHttpWebSocketWrapper$SignalRWebSocketListener.onFailure(OkHttpWebSocketWrapper.java:70) at okhttp3.internal.ws.RealWebSocket.failWebSocket(RealWebSocket.java:38) at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.java:133) at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.java:60) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:764)

Is there a workaround? Will this be fixed in future versions of signalR?

@javiercn javiercn added the area-signalr Includes: SignalR clients and servers label Jan 20, 2021
@BrennanConroy
Copy link
Member

The first exception will be fixed in 5.0.3 #29249

The second exception is something we haven't seen before, it might also be fixed in 5.0.3 but I'd be interested if you have more details such as logs and repro steps.

@JunTaoLuo JunTaoLuo added the Needs: Author Feedback The author of this issue needs to respond in order for us to continue investigating this issue. label Jan 20, 2021
@SergeyKharuk
Copy link
Author

SergeyKharuk commented Jan 21, 2021

The second exception is really weird.
I have no steps to reproduce because it is taken from firebase crashlytics and was threw only once.
But i have two assumptions:

  1. Maybe it is device bug http://prntscr.com/xcyjp7 http://prntscr.com/xd19o1
  2. In our android app socket connection is being opened when a user opens screen (let's name it 'A') in on onResume() method.
    And is being closed when a user leave from screeen 'A' in on onPause() method.
    For opening connection I use mHubConnection.start() method.
    For closing connection I use mHubConnection.stop() method.
    And I can suppose that user can do 'open-close-open' (or close-open-close, or something else) actions too fast.

I share you a gist (java class) from our app that contains all socket logic. The key lines are 73, 125, 136, 144, 148.
As I said above I invoke connect() method in onResume(), and invoke disconnect() in onPause() methods of screen 'A'.
I hope it will be helpful for you))

https://gist.github.com/SergeyKharuk/df462add7dc0b206be63beef9262a643

@ghost ghost added Needs: Attention 👋 This issue needs the attention of a contributor, typically because the OP has provided an update. and removed Needs: Author Feedback The author of this issue needs to respond in order for us to continue investigating this issue. labels Jan 21, 2021
@SergeyKharuk
Copy link
Author

I have a third assumption.
In our release build proGuard is on. Does it make some affect?

my proguard-rules.pro file https://gist.github.com/SergeyKharuk/f7bc59c328662fd39232c80bfd87eba8

@ghost
Copy link

ghost commented Jan 22, 2021

Thanks for contacting us.
We're moving this issue to the Next sprint planning milestone for future evaluation / consideration. We will evaluate the request when we are planning the work for the next milestone. To learn more about what to expect next and how this issue will be handled you can read more about our triage process here.

@dsuresh-ap
Copy link

We have had that weird second crash as well. From our logs it seems like the user was in the background, an connection was started but then a failure occurred and we tried to reconnect.

Fatal Exception: java.lang.RuntimeException: The HubConnection failed to transition from the 'CONNECTED' state to the 'DISCONNECTED' state because it was actually in the 'DISCONNECTED' state.
       at com.microsoft.signalr.HubConnection$ReconnectingConnectionState.changeState(HubConnection.java:1512)
       at com.microsoft.signalr.HubConnection.stopConnection(HubConnection.java:538)
       at com.microsoft.signalr.HubConnection.lambda$start$6(HubConnection.java:279)
       at com.microsoft.signalr.HubConnection.lambda$start$6$HubConnection(HubConnection.java)
       at com.microsoft.signalr.-$$Lambda$HubConnection$EkdUEf1TbIWyqrPvoiabHmwDEmY.invoke(-.java:2)
       at com.microsoft.signalr.WebSocketTransport.onClose(WebSocketTransport.java:90)
       at com.microsoft.signalr.WebSocketTransport.lambda$start$1(WebSocketTransport.java:55)
       at com.microsoft.signalr.WebSocketTransport.lambda$start$1$WebSocketTransport(WebSocketTransport.java)
       at com.microsoft.signalr.-$$Lambda$WebSocketTransport$fejcvJEcEEhKZWxrg8q1qfE4F-g.invoke(-.java:2)
       at com.microsoft.signalr.OkHttpWebSocketWrapper$SignalRWebSocketListener.onFailure(OkHttpWebSocketWrapper.java:148)
       at okhttp3.internal.ws.RealWebSocket.failWebSocket(RealWebSocket.java:570)
       at okhttp3.internal.ws.RealWebSocket$1.onResponse(RealWebSocket.java:211)
       at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
       at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at java.lang.Thread.run(Thread.java:919)

@SergeyKharuk
Copy link
Author

SergeyKharuk commented Feb 19, 2021

Hello)
So, in our anroid app we updated signalr library to 'com.microsoft.signalr:signalr:5.0.3' and uploaded new release build to Play Market.
Fortunately, by monitoring Firebase Crashlytics, crashes I had wrote above isn't being catching for now. But we will continue to monitor.

One more trouble, we have also third type of crash that have a lot of cases on Firebase Crashlytics. It was even in previous version of signalR we used (5.0.2).
Caused by java.lang.NullPointerException Attempt to invoke interface method 'i.a.a com.microsoft.signalr.Transport.stop()' on a null object reference com.microsoft.signalr.HubConnection.stop (HubConnection.java:424) com.microsoft.signalr.HubConnection.stop (HubConnection.java:513) com.twelve.app.data.network.repositories.impl.SocketManagerImpl.disconnect (SocketManagerImpl.java:144) com.twelve.app.ui.tab_matches.match_detail.MatchDetailPresenter.disconnectFromSocket (MatchDetailPresenter.java:466) com.twelve.app.ui.tab_matches.match_detail.MatchDetailFragment.onPause (MatchDetailFragment.java:182) androidx.fragment.app.Fragment.performPause (Fragment.java:2879) androidx.fragment.app.FragmentStateManager.pause (FragmentStateManager.java:373) androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1204) androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1354) androidx.fragment.app.FragmentManager.moveFragmentToExpectedState (FragmentManager.java:1432) androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1495) androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:2617) androidx.fragment.app.FragmentManager.dispatchPause (FragmentManager.java:2585) androidx.fragment.app.FragmentController.dispatchPause (FragmentController.java:280) androidx.fragment.app.FragmentActivity.onPause (FragmentActivity.java:419) com.twelve.app.ui.main.MainActivity.onPause (MainActivity.java:97) android.app.Activity.performPause (Activity.java:8150) android.app.Instrumentation.callActivityOnPause (Instrumentation.java:1508) android.app.ActivityThread.performPauseActivityIfNeeded (ActivityThread.java:4983) android.app.ActivityThread.performPauseActivity (ActivityThread.java:4944) android.app.ActivityThread.handlePauseActivity (ActivityThread.java:4896) android.app.servertransaction.PauseActivityItem.execute (PauseActivityItem.java:46) android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:176) android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97) android.app.ActivityThread$H.handleMessage (ActivityThread.java:2267) android.os.Handler.dispatchMessage (Handler.java:107) android.os.Looper.loop (Looper.java:237) android.app.ActivityThread.main (ActivityThread.java:8167) java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:496) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1100)

*Change current issue title, maybe)

@dsuresh-ap
Copy link

@SergeyKharuk We have noticed that same crash. I had made an issue for it previously: #28608

@BrennanConroy
Copy link
Member

Fortunately, by monitoring Firebase Crashlytics, crashes I had wrote above isn't being catching for now.

Glad to hear it!

Closing as the original issue looks to be fixed, the other issue is being tracked by #28608

@ghost ghost locked as resolved and limited conversation to collaborators Mar 25, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-signalr Includes: SignalR clients and servers investigate Needs: Attention 👋 This issue needs the attention of a contributor, typically because the OP has provided an update.
Projects
None yet
Development

No branches or pull requests

5 participants