Hi Stephan,

Thanks for the stack traces.  The option -2 in osgcamera tries to open
three windows on two screens - screen 0 and screen 1.  If you don't
have screen 1 then it should fail on these windows and not create the
cameras or associate threading, so it looks like it is trying to set
up the threading regardless of the window screen on screen 1 failing.
I'll review the code.

Robert.



On 6/9/07, Stephan Huber <[EMAIL PROTECTED]> wrote:
Robert Osfield schrieb:
> On 6/8/07, Stephan Huber <[EMAIL PROTECTED]> wrote:
>> Cole, Charles E. (LARC-B702)[GENEX SYSTEMS] schrieb:
>> > b. Starting the viewer with the
>> > "--CullThreadPerCameraDrawThreadPerContext" option always locked up
>> the
>> > application.
>> I can confirm this lockup on startup (similar to the lockup on Mac OS X)
>> It's unrelated to the shown model. I used "osgcamera -2 -c cow.osg" for
>> my testing.
>>
>>
>> Hardware: Pentium 4, Geforce 6600, Windows XP, one screen.
>
> I don't have any light to shed on this, but an extra data point,
>
>   osgcamera -2 -c cow.osg
>
> Works fine on my Athlon64 X2 with 2 x Geforce 7800GT.  App starts and
> exits cleanly.
doesn't work here on a MacBookPro with ATI1600, Windows XP, single monitor.

Here are some stack traces as requested:

the main-thread:

     ntdll.dll!7c91eb94()
     [Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder
fehlen, keine Symbole geladen für ntdll.dll]
     ntdll.dll!7c91e9c0()
     kernel32.dll!7c8025cb()
     ntdll.dll!7c92901b()
     kernel32.dll!7c802532()
 >    OpenThreadsd.dll!OpenThreads::cooperativeWait(void *
waitHandle=0x000006fc, unsigned long timeout=4294967295)  Zeile 53 +
0x10 Bytes    C++

OpenThreadsd.dll!OpenThreads::Win32ConditionPrivateData::wait(OpenThreads::Mutex
& external_mutex={...}, long timeout_ms=-1)  Zeile 107 + 0x1d Bytes    C++
     OpenThreadsd.dll!OpenThreads::Condition::wait(OpenThreads::Mutex *
mutex=0x0254cf60)  Zeile 63    C++
     osgViewerd.dll!osgViewer::EndOfDynamicDrawBlock::block()  Zeile 740
+ 0x1a Bytes    C++
     osgViewerd.dll!osgViewer::Viewer::renderingTraversals()  Zeile
2255    C++
     osgViewerd.dll!osgViewer::Viewer::frame(double
simulationTime=1.7976931348623157e+308)  Zeile 1741 + 0xf Bytes    C++
     osgcamerad.exe!main(int argc=1, char * * argv=0x024c7848)  Zeile
316 + 0x1a Bytes    C++
     osgcamerad.exe!__tmainCRTStartup()  Zeile 586 + 0x19 Bytes    C
     osgcamerad.exe!mainCRTStartup()  Zeile 403    C
     kernel32.dll!7c816fd7()

there are *five* threads with the following stack trace:

     msvcp80d.dll!_Mtxunlock(_RTL_CRITICAL_SECTION * _Mtx=0x00000002)
Zeile 54    C
     msvcp80d.dll!std::_Container_base::_Orphan_all()  Zeile 200 + 0x8
Bytes    C++
     00000698()
     msvcp80d.dll!_Mtxlock(_RTL_CRITICAL_SECTION * _Mtx=0x10573230)
Zeile 45    C
     msvcp80d.dll!_Mtxunlock(_RTL_CRITICAL_SECTION * _Mtx=0x00000002)
Zeile 54    C
     msvcp80d.dll!std::_Container_base::_Orphan_all()  Zeile 200 + 0x8
Bytes    C++
     00000698()
     (similar output as above)

and there are *six* threads with the following stack trace:

     ntdll.dll!7c91eb94()
     [Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder
fehlen, keine Symbole geladen für ntdll.dll]
     ntdll.dll!7c91e9c0()
     ntdll.dll!7c92901b()
     atioglxx.dll!69347453()
     ntdll.dll!7c91104b()
 >    OpenThreadsd.dll!OpenThreads::Mutex::lock()  Zeile 112 + 0xc
Bytes    C++

osgViewerd.dll!OpenThreads::ScopedLock<OpenThreads::Mutex>::ScopedLock<OpenThreads::Mutex>(OpenThreads::Mutex
& m={...})  Zeile 31 + 0x2a Bytes    C++
     osgViewerd.dll!ViewerDoubleBufferedRenderingOperation::draw()
Zeile 369 + 0x1c Bytes    C++

osgViewerd.dll!ViewerDoubleBufferedRenderingOperation::operator()(osg::Object
* object=0x024c9910)  Zeile 559    C++
     osgd.dll!osg::GraphicsContext::runOperations()  Zeile 428 + 0x24
Bytes    C++
     osgViewerd.dll!ViewerRunOperations::operator()(osg::Object *
object=0x024c9910)  Zeile 1022 + 0xb Bytes    C++
     osgd.dll!osg::OperationsThread::run()  Zeile 290 + 0x32 Bytes    C++

OpenThreadsd.dll!OpenThreads::ThreadPrivateActions::StartThread(void *
data=0x0254e318)  Zeile 105 + 0xf Bytes    C++
     kernel32.dll!7c80b683()
     msvcp80d.dll!_Mtxlock(_RTL_CRITICAL_SECTION * _Mtx=0x0254e318)
Zeile 45    C
     msvcp80d.dll!_Mtxunlock(_RTL_CRITICAL_SECTION * _Mtx=0x7ffd8000)
Zeile 54    C

If I understand the threading mechanism of
CullThreadPerCameraDrawThreadPerContext then I should see 13 threads
working, 1 main thread, 6 cull threads and 6 draw-threads. So one
cull-thread is missing, is this correct?

Stephan


_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to