Android native обработка сигналов
Форум — General
Доброго времени суток! Пытаюсь добавить обработчик пользовательских сигналов под сабжем. Посылаю сигнал из драйвера, принимаю в user space в нативном приложении. В приложении приведённым способам (для краткости опустил проверки возвращаемых значений и т.п.) устанавливается обработчик сигнала, ожидается сигнал и удаляется обработчик. Это всё повторяется в while 1000 раз. Проблема в том, что Android падает в рандомных местах программы, после рандомного количества повторений (1 ~ 200) и не остается ни кол стэка, ни дампа. Что я делаю не так? Может сигналы из драйвера нельзя так принимать? Капание в интернете не помогает :(
init()
{
struct sigaction action;
sigset_t signal_set;
sigemptyset(&signal_set);
sigaddset(&signal_set, SIG_USER);
action.sa_handler = sig_handler;
action.sa_mask = signal_set;
action.sa_flags = 0;
/*без обнуления sa_flags программа падает при выходе из обработчика:
: type=1701 audit(0.0:270): auid=4294967295 uid=0 gid=0 ses=4294967295 subj=u:r:su:s0 reason="memory violation" sig=11*/
sigaction(SIG_USER, &action, NULL);
}
main()
{
init();
sem_timedwait(...);
deinit();
}
deinit()
{
struct sigaction action;
sigset_t signal_set;
sigemptyset(&signal_set);
sigaddset(&signal_set, SIG_USER);
action.sa_handler = SIG_DFL;
sigaction(SIG_USER, &action, NULL);
}
signal_handler(int n)
{
LOG("signal handler");
sem_post(...)
return;
}