<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=GB2312">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi PulseAudio developers, <br>
    <br>
    I am developing PulseAudio Python Binding in C based on
    pa_threaded_mainloop to handle pa_context_subscribe callback.<br>
    <br>
    For example, when received PA_SUBSCRIPTION_EVENT_SINK
    PA_SUBSCRIPTION_EVENT_CHANGE event, I used PyEval_CallFunction to
    call Python (pygtk.py) callback.<br>
    Then pygtk.py testcase throw segfault, gdb DEBUG shown as below:<br>
    <br>
    Program received signal SIGSEGV, Segmentation fault.<br>
    [Switching to Thread 0x7fffebb3f700 (LWP 10150)]<br>
    0x00000000004e9f20 in PyObject_Call ()<br>
    (gdb) bt<br>
    #0  0x00000000004e9f20 in PyObject_Call ()<br>
    #1  0x00000000004ea396 in PyEval_CallObjectWithKeywords ()<br>
    #2  0x0000000000478a99 in PyEval_CallFunction ()<br>
    #3  0x00007fffed1969b6 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #4  0x00007fffecd45693 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #5  0x00007fffecd45a03 in pa_pdispatch_run () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #6  0x00007fffed18cbdd in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #7  0x00007fffecd4a2a9 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #8  0x00007fffed19fa1e in pa_mainloop_dispatch () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #9  0x00007fffed19fde5 in pa_mainloop_iterate () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #10 0x00007fffed19fe90 in pa_mainloop_run () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #11 0x00007fffed1ae30f in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #12 0x00007fffecd57d18 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #13 0x00007ffff7bc4e9a in start_thread (arg=0x7fffebb3f700) at
    pthread_create.c:308<br>
    #14 0x00007ffff69b3cbd in clone () at
    ../sysdeps/unix/sysv/linux/x86_64/clone.S:112<br>
    #15 0x0000000000000000 in ?? ()<br>
    <br>
    I tried to add PyGILState_Ensure() & PyGILState_Release() around
    PyEval_CallFunction() for locking/unlocking, it still throw another
    segfault shown as below:<br>
    <br>
    Program received signal SIGSEGV, Segmentation fault.<br>
    [Switching to Thread 0x7fffebb3f700 (LWP 10362)]<br>
    sem_post () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S:34<br>
    (gdb) bt<br>
    #0  sem_post () at
    ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S:34<br>
    #1  0x00000000004d456e in PyGILState_Release ()<br>
    #2  0x00007fffed1969b6 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #3  0x00007fffecd45693 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #4  0x00007fffecd45a03 in pa_pdispatch_run () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #5  0x00007fffed18cbdd in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #6  0x00007fffecd4a2a9 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #7  0x00007fffed19fa1e in pa_mainloop_dispatch () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #8  0x00007fffed19fde5 in pa_mainloop_iterate () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #9  0x00007fffed19fe90 in pa_mainloop_run () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #10 0x00007fffed1ae30f in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulse.so.0<br>
    #11 0x00007fffecd57d18 in ?? () from
    /usr/lib/x86_64-linux-gnu/libpulsecommon-1.1.so<br>
    #12 0x00007ffff7bc4e9a in start_thread (arg=0x7fffebb3f700) at
    pthread_create.c:308<br>
    #13 0x00007ffff69b3cbd in clone () at
    ../sysdeps/unix/sysv/linux/x86_64/clone.S:112<br>
    #14 0x0000000000000000 in ?? ()<br>
    <br>
    However, the console.py (non-gtk & no g_main_loop) testcase
    worked happily without segfault!<br>
    <br>
    The source code and testcase host on github
    <meta http-equiv="content-type" content="text/html; charset=GB2312">
    <a href="https://github.com/xiangzhai/pypulseaudio">https://github.com/xiangzhai/pypulseaudio</a>
    please someone give me advice, thanks a lot!<br>
    <br>
    Xiang Zhai<br>
  </body>
</html>