Threaded OpenGLComponent SIGSEGV


#1

On two or three Linux systems, all Arch, kernel 3.1.5, NVIDIA 290.10 driver, the app ends with sigsegv when a threaded OGL context is used.

Can be recreated with the JuceDemo by selecting the openGLRenderer, or changing the OpenGL Demo page to use a thread.

There’s no debugging info I can see - 3-4 blank frames, no backtrace.

Bit of a show stopper for me… the changes to OGL stopped my semi-custom threading working, and this is stopping me use the internal system.

Bruce


#2

OK - I went to play Git bubblesort.

The sigsegv occurs when any OpenGL context is created on the Linux systems I have access to - not threaded - any.

The problem is caused by the changes in the November 15th Git check-in, commented as “OpenGL Development”.

The November 10 check-in labelled OpenGL Renderer blah blah does not crash the same way.

Bruce


#3

So, I just moved to the very latest tip, and I still can’t run an OpenGLComponent.

I have:
A Dell laptop with Intel CPU, and an Nvidia 9400 GPU.
The Nvidia driver is 290.10. Xorg is 1.11.3, Kernel is 3.1.5 (Arch linux)

Using a clean build of the tip of Juce, if I run the JuceDemo, having added -ldl and built for debug, I get a sigsegv when trying to show the OpenGLComponent.

How can I debug this? I don’t see enough clues for me personally to start from.

Bruce

Stacktrace:

[code]Program received signal SIGSEGV, Segmentation fault.
0x000000004007cec2 in ?? ()
(gdb) thread apply all bt full

Thread 2 (Thread 0x7ffff2ad8700 (LWP 2383)):
#0 0x00007ffff792de8a in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#1 0x00000000005a8803 in juce::WaitableEventImpl::wait (this=0xebb840, timeOutMillisecs=4)
at …/…/…/…/modules/juce_core/native/juce_posix_SharedCode.h:121
now = {tv_sec = 1327448024, tv_usec = 953802}
time = {tv_sec = 1327448024, tv_nsec = 957802000}
#2 0x000000000058a051 in juce::WaitableEvent::wait (this=0xebb768, timeOutMillisecs=4)
at …/…/…/…/modules/juce_core/native/juce_posix_SharedCode.h:174
No locals.
#3 0x00000000005720aa in juce::Thread::wait (this=0xebb710, timeOutMilliseconds=4)
at …/…/…/…/modules/juce_core/threads/juce_Thread.cpp:295
No locals.
#4 0x00000000005e5321 in juce::timer::TimerThread::run (this=0xebb710)
at …/…/…/…/modules/juce_events/timers/juce_Timer.cpp:94
messageDeliveryTimeout = 1358538
now = 1356538
elapsed = 52
timeUntilFirstTimer = -42
lastTime = 1356538
messageToSend = {referencedObject = 0xefd510}
#5 0x000000000057192b in juce::Thread::threadEntryPoint (this=0xebb710)
at …/…/…/…/modules/juce_core/threads/juce_Thread.cpp:135
No locals.
#6 0x0000000000571965 in juce::juce_threadEntryPoint (userData=0xebb710)
at …/…/…/…/modules/juce_core/threads/juce_Thread.cpp:147
No locals.
#7 0x000000000058bad0 in juce::threadEntryProc (userData=0xebb710)
—Type to continue, or q to quit—
at …/…/…/…/modules/juce_core/native/juce_posix_SharedCode.h:813
No locals.
#8 0x00007ffff7929df0 in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#9 0x00007ffff5b023ed in clone () from /lib/libc.so.6
No symbol table info available.
#10 0x0000000000000000 in ?? ()
No symbol table info available.

Thread 1 (Thread 0x7ffff7fd4740 (LWP 2380)):
#0 0x000000004007cec2 in ?? ()
No symbol table info available.
#1 0x0000000040000000 in ?? ()
No symbol table info available.
#2 0x00007ffff7e6faf0 in ?? ()
No symbol table info available.
#3 0x0000000000000004 in ?? ()
No symbol table info available.
#4 0x0000000000000000 in ?? ()
No symbol table info available.

[/code]


#4

Sorry, can’t really see what’s going on from that…


#5

OK (pity about the mysteries here), between the tip last time, and the tip now, OpenGL on Linux x86_64, Kernel 3.1.5, NVidia 290.10, OpenGL is working again.

I suspect the JuceDemo still has a weird workaround to drop into the ‘Software Renderer’ only when the OpenGLDemo is displayed, but no sigsegv!

I’m finding some deadlocks with more than one background thread rendering OpenGLComponents. Will report back.