Мое приложение неожиданно завершает работу.
Это особенно трудно понять, потому что нет очевидных ошибок sh, ошибок или чего-либо, вызывающего проблему.
Вот лог-код, который я видя:
...
[07-11 20:52:15.706 21105:21517 D/TGLOG]
Thread exit from signal 12
...
[07-11 20:52:15.924 4725:4888 W/InputDispatcher]
channel '81fe60d com.templegatesgames.RollAndroid/com.TGActivity.TGActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9, fd=645
[07-11 20:52:15.924 4725:4888 E/InputDispatcher]
channel '81fe60d com.templegatesgames.RollAndroid/com.TGActivity.TGActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
...
[07-11 20:52:15.933 4725:7850 I/WindowManager]
WIN DEATH: Window{81fe60d u0 com.templegatesgames.RollAndroid/com.TGActivity.TGActivity}
...
(Нет других сообщений от нашего приложения или чего-то вроде бы важного в разделах ...)
На самом деле непонятно, что "Потребитель закрыл ..." "сообщение означает, что поиск по inte rnet и переполнению стека дает довольно непоследовательные / непоследовательные ответы. Любая информация здесь может помочь.
Это происходит только на Android 10 (этот же код отлично работает на <10, а также на iOS) </p>
Мы звоним:
pthread_kill(*thread, SIGUSR2);
Где SIGUSR2 зарегистрирован через:
signal(SIGUSR2, ThreadExitCallbackHandler);
С обратным вызовом:
void ThreadExitCallbackHandler(int signum)
{
XTraceAndLog("Thread exit from signal %d", signum);
pthread_exit(NULL);
}
Это происходит в довольно сложный момент в приложении для настольных игр, когда мы выходим из игры и уничтожить игровой поток. (Игровой поток выполняет logi c игры линейным образом. Это длительный поток, похожий на сопрограмму, нет никакого подобного цикла или опроса, чтобы он вышел на «вершине стека» или что-то еще). Мы сделали это с другими нашими приложениями для настольных игр без проблем. В этой игре нет очевидных отличий, но очевидно, что что-то другое, но неясно, с чего даже начать поиск.
Любые идеи даже о том, с чего начать поиск, были бы полезны.