OpenVpnManagementThread causing so much ANR which affect user experience. I have tried on 8 to 10 devices to reproduce the ANR but its not happening on my devices, but the play console and Firebase is reporting the ANR.
Android Version : 8+
Android Vendor/Custom ROM: Almost every device
Device: Different devices, not specific. almost all devices.
Description of the issue
The ANR occurs when user connect the VPN. I am unable to reproduce the ANR on my available devices.
# Crashlytics - Stack trace
# Platform: android
# Version: 1.3 (4)
# Issue: 0505baf5df590cc4366d7ff9f1064933
# Session: 6385E411036500011D7E61735A006C29_DNE_0_v2
# Date: Tue Nov 29 2022 16:17:05 GMT+0500
Signal Catcher (runnable):tid=4 systid=7557
#00 pc 0x53a6e0 libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool) + 128)
#01 pc 0x6f0e04 libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool, BacktraceMap*, bool) const + 236)
#02 pc 0x6fe690 libart.so (art::DumpCheckpoint::Run(art::Thread*) + 208)
#03 pc 0x364248 libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*) + 440)
#04 pc 0x6fce30 libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool) + 280)
#05 pc 0x6fc824 libart.so (art::ThreadList::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) + 292)
#06 pc 0x6d5974 libart.so (art::Runtime::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) + 184)
#07 pc 0x6e1994 libart.so (art::SignalCatcher::HandleSigQuit() + 468)
#08 pc 0x574230 libart.so (art::SignalCatcher::Run(void*) + 264)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
main (timed waiting):tid=1 systid=7550
at java.lang.Thread.sleep(Thread.java)
at java.lang.Thread.sleep(Thread.java:450)
at java.lang.Thread.sleep(Thread.java:355)
at de.blinkt.openvpn.core.OpenVpnManagementThread.releaseHoldCmd(OpenVpnManagementThread.java:22)
at de.blinkt.openvpn.core.OpenVpnManagementThread.lambda$new$0(OpenVpnManagementThread.java:7)
at androidx.appcompat.widget.TooltipCompatHandler$$InternalSyntheticLambda$0$990bd139c764fdd0af01d525cfae7cb46744c3b2435b7922b50af1bf6983d455$1.run$bridge(TooltipCompatHandler.java:7)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:344)
at android.app.ActivityThread.main(ActivityThread.java:8191)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
perfetto_hprof_listener (native):tid=7 systid=7558
#00 pc 0xc9148 libc.so (read + 8)
#01 pc 0x1d840 libperfetto_hprof.so (void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ArtPlugin_Initialize::$_34> >(void*) + 260)
#02 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#03 pc 0x7a93c libc.so (__start_thread + 68)
Binder:7550_1 (native):tid=8 systid=7565
#00 pc 0xc93e8 libc.so (__ioctl + 8)
#01 pc 0x82ec8 libc.so (ioctl + 156)
#02 pc 0x56044 libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 292)
#03 pc 0x56334 libbinder.so (android::IPCThreadState::getAndExecuteCommand() + 28)
#04 pc 0x56c6c libbinder.so (android::IPCThreadState::joinThreadPool(bool) + 72)
#05 pc 0x83584 libbinder.so (android::PoolThread::threadLoop() + 28)
#06 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#07 pc 0xbf47c libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*) + 148)
#08 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
Jit thread pool worker thread 0 (native):tid=9 systid=7559
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x47cc80 libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*) + 140)
#02 pc 0x47cb18 libart.so (art::ThreadPool::GetTask(art::Thread*) + 120)
#03 pc 0x6199e4 libart.so (art::ThreadPoolWorker::Run() + 136)
#04 pc 0x6198c4 libart.so (art::ThreadPoolWorker::Callback(void*) + 160)
#05 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#06 pc 0x7a93c libc.so (__start_thread + 68)
FinalizerWatchdogDaemon (waiting):tid=10 systid=7564
at java.lang.Object.wait(Object.java)
at java.lang.Object.wait(Object.java:442)
at java.lang.Object.wait(Object.java:568)
at java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:385)
at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:365)
at java.lang.Daemons$Daemon.run(Daemons.java:140)
at java.lang.Thread.run(Thread.java:1012)
ReferenceQueueDaemon (waiting):tid=11 systid=7562
at java.lang.Object.wait(Object.java)
at java.lang.Object.wait(Object.java:442)
at java.lang.Object.wait(Object.java:568)
at java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:232)
at java.lang.Daemons$Daemon.run(Daemons.java:140)
at java.lang.Thread.run(Thread.java:1012)
FinalizerDaemon (waiting):tid=12 systid=7563
at java.lang.Object.wait(Object.java)
at java.lang.Object.wait(Object.java:442)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:203)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:224)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:300)
at java.lang.Daemons$Daemon.run(Daemons.java:140)
at java.lang.Thread.run(Thread.java:1012)
HeapTaskDaemon (waiting):tid=13 systid=7560
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x47cc80 libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*) + 140)
#02 pc 0x46d13c libart.so (art::gc::TaskProcessor::GetTask(art::Thread*) + 736)
#03 pc 0x46ce10 libart.so (art::gc::TaskProcessor::RunAllTasks(art::Thread*) + 32)
at dalvik.system.VMRuntime.runHeapTasks(VMRuntime.java)
at java.lang.Daemons$HeapTaskDaemon.runInternal(Daemons.java:609)
at java.lang.Daemons$Daemon.run(Daemons.java:140)
at java.lang.Thread.run(Thread.java:1012)
Binder:7550_2 (native):tid=14 systid=7567
#00 pc 0xc93e8 libc.so (__ioctl + 8)
#01 pc 0x82ec8 libc.so (ioctl + 156)
#02 pc 0x56044 libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 292)
#03 pc 0x56334 libbinder.so (android::IPCThreadState::getAndExecuteCommand() + 28)
#04 pc 0x56c6c libbinder.so (android::IPCThreadState::joinThreadPool(bool) + 72)
#05 pc 0x83584 libbinder.so (android::PoolThread::threadLoop() + 28)
#06 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#07 pc 0xbf47c libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*) + 148)
#08 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
Profile Saver (native):tid=15 systid=7568
#00 pc 0x75574 libc.so (syscall + 36)
#01 pc 0x48771c libart.so (art::ConditionVariable::TimedWait(art::Thread*, long, int) + 252)
#02 pc 0x54380c libart.so (art::ProfileSaver::Run() + 524)
#03 pc 0x538fc0 libart.so (art::ProfileSaver::RunProfileSaverThread(void*) + 148)
#04 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#05 pc 0x7a93c libc.so (__start_thread + 68)
Crashlytics Exception Handler1 (waiting):tid=17 systid=7573
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at com.google.firebase.crashlytics.internal.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:2)
at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:5)
at java.lang.Thread.run(Thread.java:1012)
com.google.firebase.crashlytics.startup1 (waiting):tid=18 systid=7574
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at com.google.firebase.crashlytics.internal.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:2)
at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:5)
at java.lang.Thread.run(Thread.java:1012)
awaitEvenIfOnMainThread task continuation executor1 (waiting):tid=20 systid=7576
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at com.google.firebase.crashlytics.internal.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:2)
at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:5)
at java.lang.Thread.run(Thread.java:1012)
pool-6-thread-1 (waiting):tid=22 systid=7578
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
GmsDynamite (waiting):tid=23 systid=7579
at java.lang.Object.wait(Object.java)
at java.lang.Object.wait(Object.java:442)
at java.lang.Object.wait(Object.java:568)
at com.google.android.gms.dynamite.zza.run(zza.java:6)
WM.task-1 (waiting):tid=27 systid=7586
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
DefaultDispatcher-worker-2 (timed waiting):tid=28 systid=7589
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
RenderThread (native):tid=26 systid=7591
#00 pc 0xca3ac libc.so (__epoll_pwait + 12)
#01 pc 0x17ea8 libutils.so (android::Looper::pollInner(int) + 184)
#02 pc 0x17d84 libutils.so (android::Looper::pollOnce(int, int*, int*, void**) + 116)
#03 pc 0x3d8cf0 libhwui.so (android::uirenderer::ThreadBase::waitForWork() + 136)
#04 pc 0x3d8b38 libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop() + 80)
#05 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#06 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#07 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#08 pc 0x7a93c libc.so (__start_thread + 68)
WM.task-2 (waiting):tid=30 systid=7602
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
queued-work-looper (native):tid=25 systid=7607
#00 pc 0xca3ac libc.so (__epoll_pwait + 12)
#01 pc 0x17ea8 libutils.so (android::Looper::pollInner(int) + 184)
#02 pc 0x17d84 libutils.so (android::Looper::pollOnce(int, int*, int*, void**) + 116)
#03 pc 0x154e7c libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int) + 48)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:339)
at android.os.Looper.loopOnce(Looper.java:179)
at android.os.Looper.loop(Looper.java:344)
at android.os.HandlerThread.run(HandlerThread.java:67)
LooperMessageSuperviser (native):tid=32 systid=7611
#00 pc 0xca3ac libc.so (__epoll_pwait + 12)
#01 pc 0x17ea8 libutils.so (android::Looper::pollInner(int) + 184)
#02 pc 0x17d84 libutils.so (android::Looper::pollOnce(int, int*, int*, void**) + 116)
#03 pc 0x154e7c libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int) + 48)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:339)
at android.os.Looper.loopOnce(Looper.java:179)
at android.os.Looper.loop(Looper.java:344)
at android.os.HandlerThread.run(HandlerThread.java:67)
Binder:7550_3 (native):tid=34 systid=7614
#00 pc 0xc93e8 libc.so (__ioctl + 8)
#01 pc 0x82ec8 libc.so (ioctl + 156)
#02 pc 0x56044 libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 292)
#03 pc 0x56334 libbinder.so (android::IPCThreadState::getAndExecuteCommand() + 28)
#04 pc 0x56c6c libbinder.so (android::IPCThreadState::joinThreadPool(bool) + 72)
#05 pc 0x83584 libbinder.so (android::PoolThread::threadLoop() + 28)
#06 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#07 pc 0xbf47c libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*) + 148)
#08 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
hwuiTask0 (native):tid=35 systid=7622
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x79e3c libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*) + 148)
#02 pc 0xdd3b0 libc.so (pthread_cond_wait + 84)
#03 pc 0x56ca0 libc++.so (std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 24)
#04 pc 0x5123b4 libhwui.so (android::uirenderer::CommonPool::workerLoop() + 96)
#05 pc 0x213f58 libhwui.so (void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, android::uirenderer::CommonPool::CommonPool()::$_0> >(void*) + 264)
#06 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#07 pc 0x7a93c libc.so (__start_thread + 68)
hwuiTask1 (native):tid=36 systid=7623
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x79e3c libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*) + 148)
#02 pc 0xdd3b0 libc.so (pthread_cond_wait + 84)
#03 pc 0x56ca0 libc++.so (std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 24)
#04 pc 0x5123b4 libhwui.so (android::uirenderer::CommonPool::workerLoop() + 96)
#05 pc 0x213f58 libhwui.so (void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, android::uirenderer::CommonPool::CommonPool()::$_0> >(void*) + 264)
#06 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#07 pc 0x7a93c libc.so (__start_thread + 68)
Binder:7550_4 (native):tid=37 systid=7642
#00 pc 0xc93e8 libc.so (__ioctl + 8)
#01 pc 0x82ec8 libc.so (ioctl + 156)
#02 pc 0x56044 libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 292)
#03 pc 0x56334 libbinder.so (android::IPCThreadState::getAndExecuteCommand() + 28)
#04 pc 0x56c6c libbinder.so (android::IPCThreadState::joinThreadPool(bool) + 72)
#05 pc 0x83584 libbinder.so (android::PoolThread::threadLoop() + 28)
#06 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#07 pc 0xbf47c libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*) + 148)
#08 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
GoogleApiHandler (native):tid=33 systid=7653
#00 pc 0xca3ac libc.so (__epoll_pwait + 12)
#01 pc 0x17ea8 libutils.so (android::Looper::pollInner(int) + 184)
#02 pc 0x17d84 libutils.so (android::Looper::pollOnce(int, int*, int*, void**) + 116)
#03 pc 0x154e7c libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int) + 48)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:339)
at android.os.Looper.loopOnce(Looper.java:179)
at android.os.Looper.loop(Looper.java:344)
at android.os.HandlerThread.run(HandlerThread.java:67)
ConnectivityThread (native):tid=43 systid=7671
#00 pc 0xca3ac libc.so (__epoll_pwait + 12)
#01 pc 0x17ea8 libutils.so (android::Looper::pollInner(int) + 184)
#02 pc 0x17d84 libutils.so (android::Looper::pollOnce(int, int*, int*, void**) + 116)
#03 pc 0x154e7c libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int) + 48)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:339)
at android.os.Looper.loopOnce(Looper.java:179)
at android.os.Looper.loop(Looper.java:344)
at android.os.HandlerThread.run(HandlerThread.java:67)
DefaultDispatcher-worker-5 (timed waiting):tid=5 systid=7689
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-1 (timed waiting):tid=49 systid=7700
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-3 (timed waiting):tid=63 systid=7724
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-6 (timed waiting):tid=69 systid=7735
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-4 (timed waiting):tid=70 systid=7736
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-8 (timed waiting):tid=71 systid=7705
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-7 (timed waiting):tid=72 systid=7703
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
Binder:7550_5 (native):tid=119 systid=7801
#00 pc 0xc93e8 libc.so (__ioctl + 8)
#01 pc 0x82ec8 libc.so (ioctl + 156)
#02 pc 0x56044 libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 292)
#03 pc 0x56334 libbinder.so (android::IPCThreadState::getAndExecuteCommand() + 28)
#04 pc 0x56c6c libbinder.so (android::IPCThreadState::joinThreadPool(bool) + 72)
#05 pc 0x83584 libbinder.so (android::PoolThread::threadLoop() + 28)
#06 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#07 pc 0xbf47c libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*) + 148)
#08 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
Binder:7550_6 (native):tid=140 systid=7861
#00 pc 0xc93e8 libc.so (__ioctl + 8)
#01 pc 0x82ec8 libc.so (ioctl + 156)
#02 pc 0x56044 libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 292)
#03 pc 0x56334 libbinder.so (android::IPCThreadState::getAndExecuteCommand() + 28)
#04 pc 0x56c6c libbinder.so (android::IPCThreadState::joinThreadPool(bool) + 72)
#05 pc 0x83584 libbinder.so (android::PoolThread::threadLoop() + 28)
#06 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#07 pc 0xbf47c libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*) + 148)
#08 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
Binder:7550_7 (native):tid=2 systid=11611
#00 pc 0xc93e8 libc.so (__ioctl + 8)
#01 pc 0x82ec8 libc.so (ioctl + 156)
#02 pc 0x56044 libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 292)
#03 pc 0x56334 libbinder.so (android::IPCThreadState::getAndExecuteCommand() + 28)
#04 pc 0x56c6c libbinder.so (android::IPCThreadState::joinThreadPool(bool) + 72)
#05 pc 0x83584 libbinder.so (android::PoolThread::threadLoop() + 28)
#06 pc 0x1358c libutils.so (android::Thread::_threadLoop(void*) + 264)
#07 pc 0xbf47c libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*) + 148)
#08 pc 0x12de8 libutils.so (thread_data_t::trampoline(thread_data_t const*) + 408)
#09 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#10 pc 0x7a93c libc.so (__start_thread + 68)
UIMonitorThread (timed waiting):tid=3 systid=18733
at java.lang.Object.wait(Object.java)
at java.lang.Object.wait(Object.java:442)
at android.os.OplusTheiaUIMonitor$MonitorThread.run(OplusTheiaUIMonitor.java:183)
ScionFrontendApi (timed waiting):tid=6 systid=18734
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2123)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:458)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
DefaultDispatcher-worker-9 (timed waiting):tid=19 systid=18742
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-10 (timed waiting):tid=21 systid=18744
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-12 (timed waiting):tid=24 systid=18746
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-11 (timed waiting):tid=29 systid=18745
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-13 (timed waiting):tid=31 systid=18747
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-15 (timed waiting):tid=38 systid=18749
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
DefaultDispatcher-worker-14 (timed waiting):tid=39 systid=18748
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:357)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.java:17)
db.v Dispatcher (timed waiting):tid=40 systid=18751
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:463)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:939)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
db.v Dispatcher (timed waiting):tid=41 systid=18750
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:463)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:939)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
db.v Dispatcher (timed waiting):tid=42 systid=18752
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:463)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:939)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
db.v Dispatcher (timed waiting):tid=44 systid=18743
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:463)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:939)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
db.v Dispatcher (timed waiting):tid=45 systid=18753
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:463)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:939)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
db.v TaskRunner (timed waiting):tid=46 systid=18769
at java.lang.Object.wait(Object.java)
at okhttp3.internal.concurrent.TaskRunner$RealBackend.coordinatorWait(TaskRunner.java:25)
at okhttp3.internal.concurrent.TaskRunner.awaitTaskToRun(TaskRunner.java:13)
at okhttp3.internal.concurrent.TaskQueue.getTaskRunner$okhttp(TaskQueue.java:5)
at okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.java:5)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Okio Watchdog (timed waiting):tid=47 systid=18770
at java.lang.Object.wait(Object.java)
at java.lang.Object.wait(Object.java:442)
at okio.AsyncTimeout$Companion.awaitTimeout$okio(AsyncTimeout.java:6)
at okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:5)
db.v Dispatcher (timed waiting):tid=48 systid=18771
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:463)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:939)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
pool-10-thread-2 (timed waiting):tid=50 systid=18782
at jdk.internal.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:463)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:939)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
process reaper (native):tid=53 systid=18787
#00 pc 0xca5e8 libc.so (wait4 + 8)
#01 pc 0x2b618 libopenjdk.so (UNIXProcess_waitForProcessExit + 48)
at java.lang.UNIXProcess.waitForProcessExit(UNIXProcess.java)
at java.lang.UNIXProcess.-$$Nest$mwaitForProcessExit(UNIXProcess.java)
at java.lang.UNIXProcess$3.run(UNIXProcess.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
OpenVPNManagementThread (native):tid=51 systid=18804
#00 pc 0xc9fe8 libc.so (__recvmsg + 8)
#01 pc 0x86dec libc.so (recvmsg + 52)
#02 pc 0x128f4 libbase.so (android::base::ReceiveFileDescriptorVector(android::base::borrowed_fd, void*, unsigned long, unsigned long, std::__1::vector<android::base::unique_fd_impl<android::base::DefaultCloser>, std::__1::allocator<android::base::unique_fd_impl<android::base::DefaultCloser> > >*) + 376)
#03 pc 0x15dd6c libandroid_runtime.so (android::socket_read_all(_JNIEnv*, _jobject*, int, void*, unsigned long) + 92)
#04 pc 0x15d7e4 libandroid_runtime.so (android::socket_readba(_JNIEnv*, _jobject*, _jbyteArray*, int, int, _jobject*) + 336)
at android.net.LocalSocketImpl.readba_native(LocalSocketImpl.java)
at android.net.LocalSocketImpl.access$300(LocalSocketImpl.java:37)
at android.net.LocalSocketImpl$SocketInputStream.read(LocalSocketImpl.java:110)
at android.net.LocalSocketImpl$SocketInputStream.read(LocalSocketImpl.java:96)
at de.blinkt.openvpn.core.OpenVpnManagementThread.run(OpenVpnManagementThread.java:2)
at java.lang.Thread.run(Thread.java:1012)
OpenVPNProcessThread (native):tid=16 systid=18805
#00 pc 0xc9148 libc.so (read + 8)
#01 pc 0x29e98 libjavacore.so (Linux_readBytes(_JNIEnv*, _jobject*, _jobject*, _jobject*, int, int) + 172)
at libcore.io.Linux.readBytes(Linux.java)
at libcore.io.Linux.read(Linux.java:190)
at libcore.io.ForwardingOs.read(ForwardingOs.java:613)
at libcore.io.BlockGuardOs.read(BlockGuardOs.java:325)
at libcore.io.ForwardingOs.read(ForwardingOs.java:613)
at libcore.io.IoBridge.read(IoBridge.java:604)
at java.io.FileInputStream.read(FileInputStream.java:323)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:347)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:291)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:355)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:181)
at java.io.InputStreamReader.read(InputStreamReader.java:180)
at java.io.BufferedReader.fill(BufferedReader.java:172)
at java.io.BufferedReader.readLine(BufferedReader.java:337)
at java.io.BufferedReader.readLine(BufferedReader.java:403)
at de.blinkt.openvpn.core.OpenVPNThread.startOpenVPNThreadArgs(OpenVPNThread.java:4)
at de.blinkt.openvpn.core.OpenVPNThread.run(OpenVPNThread.java:45)
at java.lang.Thread.run(Thread.java:1012)
otrace-handler (unknown):tid=7566 systid=7566
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x79e3c libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*) + 148)
#02 pc 0xdd3b0 libc.so (pthread_cond_wait + 84)
#03 pc 0x56ca0 libc++.so (std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 24)
#04 pc 0x1cb54 libcutils.so (void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, oplustrace::TraceHandler::TraceHandler(char const*)::$_0> >(void*) + 468)
#05 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#06 pc 0x7a93c libc.so (__start_thread + 68)
DefaultDispatch (unknown):tid=7590 systid=7590
#00 pc 0xa4b8c libwg-go.so
DefaultDispatch (unknown):tid=7593 systid=7593
#00 pc 0xa4b90 libwg-go.so
DefaultDispatch (unknown):tid=7595 systid=7595
#00 pc 0xa4b8c libwg-go.so
DefaultDispatch (unknown):tid=7596 systid=7596
#00 pc 0xa4b8c libwg-go.so
DefaultDispatch (unknown):tid=7599 systid=7599
#00 pc 0xa4b8c libwg-go.so
DefaultDispatch (unknown):tid=7600 systid=7600
#00 pc 0xa4b8c libwg-go.so
RenderThread (unknown):tid=7630 systid=7630
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x79e3c libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*) + 148)
#02 pc 0x87514 libc.so (sem_wait + 136)
#03 pc 0x26c3a4 libGLESv2_adreno.so (!!!0000!cad2e78a02755cb9d475cedb69732b!c5f0e23! + 92)
#04 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#05 pc 0x7a93c libc.so (__start_thread + 68)
RenderThread (unknown):tid=7631 systid=7631
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x79e3c libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*) + 148)
#02 pc 0x87514 libc.so (sem_wait + 136)
#03 pc 0x26c3a4 libGLESv2_adreno.so (!!!0000!cad2e78a02755cb9d475cedb69732b!c5f0e23! + 92)
#04 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#05 pc 0x7a93c libc.so (__start_thread + 68)
Binder:7550_3 (unknown):tid=7679 systid=7679
#00 pc 0x75570 libc.so (syscall + 32)
#01 pc 0x79e3c libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*) + 148)
#02 pc 0xdd3b0 libc.so (pthread_cond_wait + 84)
#03 pc 0x56ca0 libc++.so (std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 24)
#04 pc 0x9f3b4 libgui.so (android::AsyncWorker::run() + 444)
#05 pc 0x9f44c libgui.so (void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (android::AsyncWorker::*)(), android::AsyncWorker*> >(void*) + 64)
#06 pc 0xde184 libc.so (__pthread_start(void*) + 264)
#07 pc 0x7a93c libc.so (__start_thread + 68)
General information:
OpenVpnManagementThread causing so much ANR which affect user experience. I have tried on 8 to 10 devices to reproduce the ANR but its not happening on my devices, but the play console and Firebase is reporting the ANR.
Description of the issue
The ANR occurs when user connect the VPN. I am unable to reproduce the ANR on my available devices.
Rout as per Stack Trace
private void releaseHoldCmd() { mResumeHandler.removeCallbacks(mResumeHoldRunnable); if ((System.currentTimeMillis() - mLastHoldRelease) < 5000) { try { Thread.sleep(3000); } catch (InterruptedException ignored) { Log.d(TAG, "releaseHoldCmd: "); } } mWaitingForRelease = false; mLastHoldRelease = System.currentTimeMillis(); managmentCommand("hold release\n"); managmentCommand("bytecount " + mBytecountInterval + "\n"); managmentCommand("state on\n"); //managmentCommand("log on all\n"); }
public boolean managmentCommand(String cmd) { try { if (mSocket != null && mSocket.getOutputStream() != null) { mSocket.getOutputStream().write(cmd.getBytes()); mSocket.getOutputStream().flush(); return true; } else{ return false; } } catch (IOException e) { return false; } }
Log