【问题标题】:Segfault using sp_session_logout after playing track播放曲目后使用 sp_session_logout 的 Segfault
【发布时间】:2013-05-12 21:07:44
【问题描述】:

如果我在播放歌曲后尝试调用 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) 的 debian sid 上。

【问题讨论】:

    标签: c segmentation-fault spotify libspotify


    【解决方案1】:

    您在 libspotify 回调中调用注销,特别是与音乐交付相关的回调。音乐传递回调发生在它们自己的线程上,而 libspotify 不是 像这样的线程安全 - 您必须在“主”线程上调用所有 API(特别是您在其上调用 sp_session_create 的线程) )。

    您的崩溃很可能通过在您的 test_spotify_end_of_track 回调被触发时不调用 logout 或通过编组到主线程并在那里调用 logout 来解决。

    【讨论】:

    • 当我将注销放在主线程中时会发生同样的事情(请参阅更新的要点)。此外,如果调用会话释放,跳过注销,我也会得到一个段错误。
    • 每当我在 sp_session_logout 之后调用 sp_session_process_events 时,我也会崩溃。
    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2014-09-20
    • 2019-12-23
    • 2012-07-21
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多