On 12/04/2014 02:11 PM, Michael wrote:
On Thursday, 4 December 2014 at 03:22:05 UTC, Ellery Newcomer wrote:

dustmite?

Not sure what went wrong with dustmite, but every time I tried it it
just started deleting all the files in the directory and setup.py would
give errors. I manually deleted a reasonable chunk of the code and I'm
left with these files which still seem to cause segfaults:

Main code: http://pastebin.com/zqgNTk9w
PyD definitions: http://pastebin.com/6mRH3KZZ
setup.py: http://pastebin.com/i9Ph78UC
test code that causes segfaults: http://pastebin.com/1ukzShVh

Cheers,
Michael.

hmm.. looks like here it originates in python when it tries to acquire the GIL. specifically, pthread_cond_timedwait is segfaulting.

in your code, execution inside a python thread makes it to receiveTimeout in get_image. it made it past receiveTimeout in acquire.

then I guess there is a context switch. the main python thread throws an exception, but a number of things trigger the segfault. I think it's just the interpreter loop calling RestoreThread. backtrace looks like

#0  pthread_cond_timedwait@@GLIBC_2.3.2 ()
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:238
#1  0x0000003799d07bb3 in PyCOND_TIMEDWAIT (cond=0x379a063220 <gil_cond>,
    mut=0x379a0631e0 <gil_mutex>, us=5000)
    at /usr/src/debug/Python-3.3.2/Python/condvar.h:103
#2  take_gil (tstate=tstate@entry=0x604410)
    at /usr/src/debug/Python-3.3.2/Python/ceval_gil.h:224
#3 0x0000003799d081fb in PyEval_RestoreThread (tstate=tstate@entry=0x604410)
...

It looks like this is the python main thread.

I see two other threads. (i took out one of your python spawns) #2 looks to be your listener thread. std.concurrency.send seems to have gotten it into a gc_malloc, but it looks like it's just waiting. it's currently in sem_wait. this one would have been spawned in D code by #3

#3 is your other python thread. it is also in pthread_cond_timedwait. by its stack trace, receiveTimeout is just waiting.


I guess tomorrow I can try messing around with thread_attachThis, as the fullcollect happening in #2 might be screwing with python data. But you aren't really passing anything from python to d or vice versa, so I'm not sure why the gc would need to know about the python threads.

not exactly my area of expertise, this.

Reply via email to