On 06.02.2012 15:59, Michal Privoznik wrote: > On 06.02.2012 10:08, Guannan Ren wrote: >> >> >> Hi, >> >> The Makefile.am in python forget to add probes.o if WITH_DTRACE >> but after I added it and tried to connect, using >> libvirt.open("qemu:///system") >> in python , it reported: "segment fault" >> I tried to figure out, but failed. If anyone can help this, thanks. >> >> The following is the backtrace: >> >> #0 0x0000003c62a810a4 in free () from /lib64/libc.so.6 >> #1 0x00007ffff1836f29 in virFree (ptrptr=0x6a6a28) at >> util/memory.c:310 >> #2 0x00007ffff1849692 in virResetError (err=0x6a6a20) at >> util/virterror.c:387 >> #3 0x00007ffff13e2761 in do_open (name=0x7ffff7ed6444 >> "qemu:///system", auth=0x0, flags=0) at libvirt.c:1093 >> #4 0x00007ffff13e4d44 in virConnectOpen (name=0x7ffff7ed6444 >> "qemu:///system") at libvirt.c:1350 >> #5 0x00007ffff1824879 in libvirt_virConnectOpen (self=<optimized >> out>, args=<optimized out>) at libvirt.c:3637 >> #6 0x0000003c652dffbb in PyEval_EvalFrameEx () from >> /usr/lib64/libpython2.7.so.1.0 >> #7 0x0000003c652e0580 in PyEval_EvalFrameEx () from >> /usr/lib64/libpython2.7.so.1.0 >> #8 0x0000003c652e15a5 in PyEval_EvalCodeEx () from >> /usr/lib64/libpython2.7.so.1.0 >> #9 0x0000003c652e16d2 in PyEval_EvalCode () from >> /usr/lib64/libpython2.7.so.1.0 >> #10 0x0000003c652fb9ec in ?? () from /usr/lib64/libpython2.7.so.1.0 >> #11 0x0000003c652fc7f0 in PyRun_FileExFlags () from >> /usr/lib64/libpython2.7.so.1.0 >> #12 0x0000003c652fd26f in PyRun_SimpleFileExFlags () from >> /usr/lib64/libpython2.7.so.1.0 >> #13 0x0000003c6530e745 in Py_Main () from >> /usr/lib64/libpython2.7.so.1.0 >> #14 0x0000003c62a2169d in __libc_start_main () from /lib64/libc.so.6 >> #15 0x0000000000400651 in _start () >> >> Guannan Ren >> > > > Running git bisect showed it was caused by > c700613b8d463212d142c97108b7a2352e23e559. However, I think it only > exposed the design problem we are facing here. > > IMHO problem is when an application tries to call virConnectOpen() (or > virConnectOpenAuth()) from two concurrent threads. This is what will happen: > > 1st thread: > call virConnectOpen(); > global variable @initialized == zero; thus virInitialize() is called, > error object is set up (via virErrorInitialize()) which is thread local > variable. However, @initialized is set to 1 in the first place. > > 2nd thread: > call virConnectOpen() as well; > @initialized is already set, therefore no thread local variable is set > and any error report will fail. > > Even if I am right, I am not sure how to fix this. > > Michal > Sorry for mystification. Here's the debug output which shows what's wrong: http://fpaste.org/6pBs/ However, I am not sure what is causing it. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list