LINUX.ORG.RU

Знатокам boost. Блокировка внутри boost::posix_time::microsec_clock::local_time().

 ,


0

1

Пытался обрабатывать сигнал (ALSA-коллбеки есть сигналы, если я правильно понимаю), вызывая в обработчике это:

boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();

Как показал дебаг, с этим кодом изредка случается задержка. В результате ALSA не дожидается обработки сигнала и посылает ещё один сигнал. А внутри приведённой функции есть блокировка примитива синхронизации ядра. Правила обработки сигналов подразумевают начало выполнения нового обработчика без ожидания завершения старого. В результате имеем блокировку где-то в ядре навечно.

В общем, придётся отказаться от общения с часами, или заменить на какое-то другое. Вопрос о том, должен ли приведённый код выполняться долго и на что его лучше заменить?

Может я неправильно понял ситуацию и происходит не «долгое выполнение» этого кода, а просто сразу вечная блокировка почему-то.

Эта же функция выполняется из другого потока, но это всё-таки отдельный поток - его выполнение сигналом блокироваться не должно и блокировку он должен освободить рано или поздно.

★☆

Последнее исправление: maxcom (всего исправлений: 3)

что-то ты делаешь не так. Вообще внутри обработчиков сигналов лучше воздержаться от использования функций с побочными эффектами. Не уверен, правда, что это применимо к ALSA.

anonymous
()
Ответ на: комментарий от kiverattes

Кэп?

Я помню, у нас в универе был препод по программированию, которого на лабе зовёшь, если что-то не работает, спрашиваешь, что не так. Он пару минут смотрит код, потом говорит: «У вас ошибка», - и уходит =)

А вообще, анон прав. Что-то явно не так. С учетом того, что ты уже неделю постишь треды про альсовские коллбэки, я тебе советую написать вопрос в рассылку альсы, спросить, как это правильно принято делать.

DELIRIUM ☆☆☆☆☆
()

В общем, я фигею, дорогая редакция. Дело не в бусте. Виснет (но гораздо реже) даже если вместо того кода поставить:

	struct timespec ts;
	clock_gettime( CLOCK_MONOTONIC, &ts);

Так что весь спектр собак порылся пока непонятно где. Запостил более подробный рассказ ещё сюда: http://stackoverflow.com/questions/9856839/alsa-callback-sigio-handler-hangs-... но сее уже наполовину неправильно. Пускай висит, может чего про futex-ы расскажут.

kiverattes ★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.