2013-05-12 3 views
0

노래를 재생 한 후 sp_session_logout을 호출하려고하면 세그먼트 화 오류가 발생합니다. 나는 기호를 가지고 있지 않는 한 정말 다음 코드와 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 

호출 된 후마다 발생의 세그먼트 폴트에 대해 많은 것을 말할 수 없다 libspotify 12.1.51 (x86_64)의 sid.

답변

3

당신은 libspotify 콜백, 특히 음악 전달 관련 콜 아웃 내에서 로그 아웃을 호출하고 있습니다. 음악 배달 콜백은 자신의 스레드에서 발생하며 libspotify 과 같은 스레드 안전하지 않습니다. "기본"스레드 (특히 sp_session_create을 호출 한 스레드)에서 모든 API를 호출해야합니다.

test_spotify_end_of_track 콜백이 발생하면 logout을 호출하지 않거나 메인 스레드가있을 때 마샬링하고 logout을 호출하여 충돌을 수정할 수 있습니다.

+0

메인 스레드에 로그 아웃 할 때와 같은 일이 발생합니다 (업데이트 된 요지 참조). 또한 세션 릴리스가 호출되면 로그 아웃을 건너 뛰고, 또한 segfault를 얻습니다. –

+0

sp_session_logout 후에 sp_session_process_events를 호출 할 때마다 충돌이 발생합니다. –