Esperanz0
Esperanz0

Reputation: 1586

E/AndroidRuntime: FATAL EXCEPTION: RxNewThreadScheduler-42

I have few report's from different users they have problem with crashing application.

To be honest I already don't have to much ideas what can happen.

Device is no active for some times for ex. 40 - 60 minutes and then this error.

Thanks for any advice or suggestions.

Error logs:

07-27 18:08:12.558 1883-5804/? E/AndroidRuntime: FATAL EXCEPTION: RxNewThreadScheduler-42\
io.reactivex.exceptions.UndeliverableException: java.io.IOException\
    at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)\
    at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:82)\
    at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:141)\
    at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\
    at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\
    at io.reactivex.Single.subscribe(Single.java:3310)\
    at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\
    at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)\
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\
    at java.lang.Thread.run(Thread.java:841)\
 Caused by: java.io.IOException\
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:124)\
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:120)\
    at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:142)\
    at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:136)\
    at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:176)\
    at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:559)\
    at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:132)\
    at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\'a0\
    at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\'a0\
    at io.reactivex.Single.subscribe(Single.java:3310)\'a0\
    at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\'a0\
    at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\'a0\
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\'a0\
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\'a0\
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)\'a0\
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\'a0\
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\'a0\
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\'a0\
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\'a0\
    at java.lang.Thread.run(Thread.java:841)\'a0\
 Caused by: com.rabbitmq.client.ShutdownSignalException: connection error\
    at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)\
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)\
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:443)\
    at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:263)\
    at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:136)\
    at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:136)\'a0\
    at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:176)\'a0\
    at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:559)\'a0\
    at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:132)\'a0\
    at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\'a0\
    at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\'a0\
    at io.reactivex.Single.subscribe(Single.java:3310)\'a0\
    at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\'a0\
    at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\'a0\
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\'a0\
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\'a0\
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)\'a0\
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\'a0\
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\'a0\
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\'a0\
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\'a0\
    at java.lang.Thread.run(Thread.java:841)\'a0\
 Caused by: com.rabbitmq.client.MissedHeartbeatException: Heartbeat missing with heartbeat = 60 seconds\
    at com.rabbitmq.client.impl.AMQConnection.handleSocketTimeout(AMQConnection.java:784)\
    at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:684)\
    at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)\
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:603)\
    at java.lang.Thread.run(Thread.java:841)\'a0\

Upvotes: 0

Views: 880

Answers (2)

Esperanz0
Esperanz0

Reputation: 1586

Solution:

Implement global rx error handler ( https://github.com/ReactiveX/RxJava/blob/2.x/docs/What's-different-in-2.0.md#error-handling )

 // If Java 8 lambdas are supported
    RxJavaPlugins.setErrorHandler(e -> { });

    // If no Retrolambda or Jack 
    RxJavaPlugins.setErrorHandler(Functions.<Throwable>emptyConsumer());

Of course this will not fix the problem. This will only prevent application crash if we forget to implement onError() method somewhere.

However everything is better than application crash : )

Upvotes: 1

crgarridos
crgarridos

Reputation: 9263

io.reactivex.exceptions.UndeliverableException is typically thrown when you are not implementing onError when you subscribe to your source. But it just wraps an exception occurred in the scheduler where is executed

You can constate this at the bottom of the trace :

Caused by: com.rabbitmq.client.MissedHeartbeatException: Heartbeat missing with heartbeat = 60 seconds\


If you are not familiarized with stack traces, I recommend you to read about, it's very important for debugging (a good answer here)

Upvotes: 0

Related Questions