python绑定中出现分段错误的原因可能是什么

python绑定中出现分段错误的原因可能是什么,python,c,segmentation-fault,cython,python-bindings,Python,C,Segmentation Fault,Cython,Python Bindings,我想使用cython将python绑定编写到c库。该库表示多线程http服务器,并通过头文件公开其API。按照cython指南,我编写了一个pxd和一个pyc文件,其中包含3个基本函数的定义: struct server *server_init() int server_start(struct server *) int server_stop(struct server *) python包装器看起来类似于: cdef class Server: cdef library.ser

我想使用cython将python绑定编写到c库。该库表示多线程http服务器,并通过头文件公开其API。按照cython指南,我编写了一个pxd和一个pyc文件,其中包含3个基本函数的定义:

struct server *server_init()
int server_start(struct server *)
int server_stop(struct server *)
python包装器看起来类似于:

cdef class Server:
    cdef library.server *_server

    def __cinit__(self):
        self._server = library.server_init()

    def server_start(self):
        return library.server_start(self._server)

    def server_stop(self):
        return library.server_stop(self._server)
绑定工作正常,服务器启动并提供内容,但是,当我从python停止服务器时,大多数情况下,python解释器会因分段错误而崩溃。崩溃发生在从c服务器返回后,我不知道是什么导致了SEG故障

内存分配/初始化/释放在这3个函数中进行,完全由c库内部处理

也许我遗漏了什么,那么分割错误的原因是什么呢

编辑:

它不会在valgrind或gdb中复制。但是,我生成了一个内核转储,回溯如下所示:

#0  0x00007f4cd0020008 in ?? () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#1  0x00007f4cd00208b3 in ?? () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#2  0x00007f4cd0020c54 in _Unwind_ForcedUnwind () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#3  0x00007f4cd5194630 in __GI___pthread_unwind (buf=<optimized out>) at unwind.c:129
#4  0x00007f4cd518c85b in __do_cancel () at ../nptl/pthreadP.h:264
#5  sigcancel_handler (sig=<optimized out>, si=<optimized out>, ctx=<optimized out>) at nptl-init.c:214
#6  sigcancel_handler (sig=<optimized out>, si=<optimized out>, ctx=<optimized out>) at nptl-init.c:173
#7  <signal handler called>
#8  0x00007f4cd4eba72b in accept4 (fd=<optimized out>, addr=..., addr_len=<optimized out>, flags=<optimized out>) at ../sysdeps/unix/sysv/linux/accept4.c:38
#9  0x00007f4cd3a2ee50 in ?? ()
#10 0x0000000000000000 in ?? ()
#0 0x00007f4cd0020008英寸??()来自/lib/x86_64-linux-gnu/libgcc_s.so.1
#1 0x00007F4CD008B3英寸??()来自/lib/x86_64-linux-gnu/libgcc_s.so.1
#从/lib/x86\u 64-linux-gnu/libgcc\u s.so.1中的2 0x00007f4cd0020c54
#3 0x00007f4cd5194630 in__________pthread_在展开时展开(buf=)。c:129
#在../nptl/pthreadP.h:264处取消()中的4 0x00007f4cd518c85b
#在nptl init.c:214处有5个sigcancel_处理程序(sig=,si=,ctx=)
#nptl init.c处的6个sigcancel_处理程序(sig=,si=,ctx=)173
#7  
#8 0x00007f4cd4eba72b位于../sysdeps/unix/sysv/linux/accept4.c:38的accept4(fd=,addr=,addr_len=,flags=)中
#9 0x00007f4cd3a2ee50英寸??()
#10 0x0000000000000000英寸??()

你试过
valgrind
吗?@Veedrac,我无法用valgrind或gdb复制它。我能够生成一个核心转储,请参见编辑。抱歉,但我没有看到足够的内容继续。你能把这个问题归结为一个同样会崩溃的最小样本吗?@Veedrac,我在另一台机器上测试过,但它不会重现,所以我不再对此进行调查。在线程取消过程中似乎出现了一些奇怪的错误,我想这与cython没有多大关系。