LINUX.ORG.RU

Сообщения lup

 

Android native обработка сигналов

Доброго времени суток! Пытаюсь добавить обработчик пользовательских сигналов под сабжем. Посылаю сигнал из драйвера, принимаю в 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;
}

 , ,

lup
()

RSS подписка на новые темы