2013-05-12 5 views
0

Я получаю ошибку сегментации, используя, если попытаюсь вызвать sp_session_logout после воспроизведения песни. Я не могу сказать много о Segfault, так как у меня нет символов,Segfault, используя sp_session_logout после воспроизведения дорожки

Со следующим коде происходит каждый выдаёт ошибку сегментации времени после выхода из системы называется https://gist.github.com/ivankelly/5564318

#0 0x00007ffff7ac5746 in ??() from /home/ivan/Apps/lib/libspotify.so.12 
#1 0x00007ffff7a38289 in ??() from /home/ivan/Apps/lib/libspotify.so.12 
#2 0x00007ffff7a38535 in ??() from /home/ivan/Apps/lib/libspotify.so.12 
#3 0x00007ffff7a39b5a in ??() from /home/ivan/Apps/lib/libspotify.so.12 
#4 0x00007ffff7a39c86 in ??() from /home/ivan/Apps/lib/libspotify.so.12 
#5 0x00007ffff79fbc8b in ??() from /home/ivan/Apps/lib/libspotify.so.12 
#6 0x00007ffff7ad05b3 in sp_session_process_events() from /home/ivan/Apps/lib/libspotify.so.12 
#7 0x0000000000401986 in main (argc=3, argv=0x7fffffffe6f8) at /home/ivan/src/spotify_test/test_spotify.c:137 

Это на Debian sid с libspotify 12.1.51 (x86_64).

ответ

3

Вы вызываете выход из обратного вызова libspotify, в частности связанного с доставкой музыки. Обратные вызовы с доставкой музыки происходят в их собственном потоке, а libspotify - это не потокобезопасный поток - вы должны назвать все API-интерфейсы «основной» нитью (в частности, поток, на который вы назвали sp_session_create).

Ваш сбой, скорее всего, будет исправлен либо не вызывать выход из системы, если ваш ответный звонок test_spotify_end_of_track, либо путем сортировки по основному потоку, когда он есть, и вызывать выход из системы.

+0

То же самое происходит, когда я помещаю выход в основной поток (см. Обновленный gist). Кроме того, если вызывается сеансовый выпуск, пропуская выход из системы, я также получаю segfault. –

+0

Всякий раз, когда я вызываю sp_session_process_events после sp_session_logout, я также получаю сбой. –