[Bf-committers] Pretty clueless Linux threads crashing...

Ton Roosendaal ton at blender.org
Thu Feb 23 21:34:10 CET 2006


I suspected scanline updating from crashing... it was reported to crash  
less frequent then, but that's not the solution. Apparently I've put a  
little bit too much efforts to limit code for update scanlines! So yes,  
it skips the 2nd thread tile drawing. Will be brought back.

We did tests a couple of days on irc with this .blend:

Not sure if it still crashes, it seems to only happen every 10 frames  
or so. So just press ANIM on it.


On 23 Feb, 2006, at 19:58, Chris Want wrote:

> Hi Ton,
> I haven't been able to replicate your crashes here -- do
> you have a blend file that is known to be volatile?
> One thing I have noticed is that the render window only
> seems to update the scanlines of one tile now (it used
> to update two tiles) -- is that a bug, or a feature?
> Regards,
> Chris
> Ton Roosendaal wrote:
>> Hi all,
>> I need help locating what goes wrong in using thread render on Linux.  
>>  I'm using SDL for threads, and it appears that in Linux threads  
>> refuse  to close (well, gdb reports lotsof zombies to end), and after  
>> a while  (unpredictable, but on some scenes every render) it ends  
>> with this:
>> #0  0xb781bcda in sem_post at GLIBC_2.0 () from   
>> /lib/tls/i686/cmov/libpthread.so.0
>> (gdb) bt
>> #0  0xb781bcda in sem_post at GLIBC_2.0 () from   
>> /lib/tls/i686/cmov/libpthread.so.0
>> #1  0xb7ba2748 in SDL_SemPost () from /usr/lib/libSDL-1.2.so.0
>> #2  0xb7ba1efb in SDL_RunThread () from /usr/lib/libSDL-1.2.so.0
>> #3  0xb7ba21d1 in SDL_KillThread () from /usr/lib/libSDL-1.2.so.0
>> #4  0xb7817361 in start_thread () from   
>> /lib/tls/i686/cmov/libpthread.so.0
>> #5  0xb7912bde in clone () from /lib/tls/i686/cmov/libc.so.6
>> Note; I am using SDL_KillThread() now instead of the official   
>> SDL_WaitThread(), because that seems to be more *stable*... using   
>> SDL_WaitThread() gives same crashes.
>> I also have no idea what this bt means... why would the KillThread  
>> call  a RunThread and then hang in sem_post()???
>> Some clues;
>> - it seems to happen more often when OpenGL is busy too. Like with  
>> huge  windows it crashes more often. I do know that within a thread  
>> you  should not use X11 or opengl, using windows/events/opengl calls  
>> in  threads won't work on OSX either. Nevertheless, we did try  
>> Brecht's  hint, to add XInitThreads() in GHOST_SystemX11.cpp, before  
>> line 107.  Didn't really give improvements.
>> - when rendering without threads button pressed, rendering goes OK.  
>> The  render code then still uses a single SDL thread for the tile  
>> render  though.
>> - On different Linux installs we get different reports. Some report   
>> crashes all the time, some claim its running fine.
>> - In OSX threads never crash this way, nor do we get zombie threads.   
>> OSX does have a quite rare opengl crash though, which also only seems  
>>  to happen while using huge windows.
>> - I've very carefully checked all code to see if there's any   
>> opengl/event call during a thread, but couldn't find one. Still might  
>>  be there though... maybe I'm just missing some.
>> - I'm not using semaphores code, but do have Mutex to protect the   
>> MEM_malloc calls.
>> The way I am using SDL threads for rendering:
>> - the main loop (not a thread) is in render module, pipeline.c,   
>> threaded_tile_processor()
>> - this loop goes to sleep when all 'thread slots' are filled.
>> - 20 times per second it wakes up, and either draws a scanline part   
>> update, or the entire tile
>> - if a thread is finished, it sets a flag in the RenderPart struct to  
>>  indicate that, then the mainloop makes sure a SDL_WaitThread is  
>> called  (SDL_KillThread now)
>> I moved all threading code to blenlib/intern/threads.c. In the c file  
>>  you can see docs for usage of the functions. Here also the mutexes  
>> are  set and used for mallocs.
>> Hopefully someone reads this with SDL coding experience! :)
>> -Ton-
>> ---------------------------------------------------------------------- 
>> -- --
>> Ton Roosendaal  Blender Foundation ton at blender.org   
>> http://www.blender.org
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at projects.blender.org
>> http://projects.blender.org/mailman/listinfo/bf-committers
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at projects.blender.org
> http://projects.blender.org/mailman/listinfo/bf-committers
Ton Roosendaal  Blender Foundation ton at blender.org  

More information about the Bf-committers mailing list