Сообщение приходит от dvmSuspendSelf()
, который потоки вызывают, когда отладчик (через поток JDWP) просит их приостановить.
Способ, которым он должен работать (где «мы» - поток):
- JDWP просит нас приостановить
- мы говорим, что мы приостановлены и идем спать
- в конце концов, отладчик разбудит нас и мы возобновим
Сообщение регистрируется, когда переменная условия, которую ВМ ожидает по сигналам, но по какой-то причине мы все еще помечены как приостановленные.Код отмечает:
/*
* The condition was signaled but we're still suspended. This
* can happen if the debugger lets go while a SIGQUIT thread
* dump event is pending (assuming SignalCatcher was resumed for
* just long enough to try to grab the thread-suspend lock).
*/
В этом случае ожидается, что мы неожиданно проснулись, когда поступил сигнал (например, system_server считает, что есть ANR, потому что основной поток не отвечает, потому что отладчик приостановил его), и если мы повторим цикл снова, отладчик получит возможность очистить нас и направить нас.
В сообщении журнала выводятся значения self->suspendCount
(сколько раз нам сказалиself->dbgSuspendCount
(сколько из этих запросов на приостановку поступило от отладчика, чтобы мы могли "отменить" все эти запросы, если отладчик отключился), и значение self->isSuspended
boolean.
Обратите внимание, что в пряниках пропал флаг "s = Y" - способ подвешивания нитей был изменен .