Hi Robert,

I can confirm than same occurs on Ubuntu 10.04 64 bits.

Reverting changes works as expected, so is not only an Android problem.

Backtace:
0x0000000000ba19f9 in ScopedLock (this=0x7fffffffdf00, m=...) at
/home/rgaitan/Projects/OSG/osg-trunk/include/OpenThreads/ScopedLock:31
31              explicit ScopedLock(M& m):m_lock(m) {m_lock.lock();}
(gdb) backtrace
#0  0x0000000000ba19f9 in ScopedLock (this=0x7fffffffdf00, m=...) at
/home/rgaitan/Projects/OSG/osg-trunk/include/OpenThreads/ScopedLock:31
#1  0x0000000000ec4632 in Scene (this=0x1c8df10) at
/home/rgaitan/Projects/OSG/osg-trunk/src/osgViewer/Scene.cpp:39
#2  0x0000000000e74cea in View (this=0x1c8d530, __in_chrg=<value
optimized out>, __vtt_parm=<value optimized out>) at
/home/rgaitan/Projects/OSG/osg-trunk/src/osgViewer/View.cpp:145
#3  0x000000000103fb7e in __static_initialization_and_destruction_0
(__initialize_p=1, __priority=65535) at
/home/rgaitan/Projects/OSG/osg-trunk/src/osgWrappers/deprecated-dotosg/osgViewer/View.cpp:22
#4  0x000000000103fcb1 in global constructors keyed to
dotosgwrapper_View_Proxy () at
/home/rgaitan/Projects/OSG/osg-trunk/src/osgWrappers/deprecated-dotosg/osgViewer/View.cpp:292
#5  0x000000000147afb6 in __do_global_ctors_aux ()
#6  0x0000000000b8e3eb in _init ()
#7  0x0000000001abd010 in ?? ()
#8  0x000000000147af35 in __libc_csu_init ()
#9  0x00007ffff5fadbe0 in __libc_start_main (main=<value optimized
out>, argc=<value optimized out>, ubp_av=<value optimized out>,
init=0x147aef0 <__libc_csu_init>, fini=0x1,
    rtld_fini=0x7ffff630de48 <main_arena+8>, stack_end=0x7fffffffe148)
at libc-start.c:185
#10 0x0000000000b90889 in _start ()


Cheers,
Rafa.


El día 19 de abril de 2012 12:32, Rafa Gaitan <[email protected]> escribió:
> Hi Robert,
>
> Working with Jorge we have spot than lastest changes in Scene.cpp has
> broken execution for Android devices. The change is:
>
> Index: src/osgViewer/Scene.cpp
> ===================================================================
> --- src/osgViewer/Scene.cpp     (revision 13030)
> +++ src/osgViewer/Scene.cpp     (revision 13031)
> @@ -18,15 +18,15 @@
>
>  typedef std::vector< osg::observer_ptr<Scene> >  SceneCache;
>
> +static SceneCache s_sceneCache;
>  static SceneCache& getSceneCache()
>  {
> -    static SceneCache s_sceneCache;
>     return s_sceneCache;
>  }
>
> +static OpenThreads::Mutex s_sceneCacheMutex;
>  static OpenThreads::Mutex& getSceneCacheMutex()
>  {
> -    static OpenThreads::Mutex s_sceneCacheMutex;
>     return s_sceneCacheMutex;
>  }
>
> Looks like static initialization is not correctly done (Android
> building currently builds in static), and crashes trying to do a
> ScopedLock.
>
> Comes to my mind two possible solutions:
> 1. Keep SceneCache inside osgDB::Registry to solve exit() problems you
> mentioned in the commit and global static initialization of the mutex
> and the cache for android.
> 2. Create a Singleton class (SceneCacheSingleton) that creates
> correctly both variables to solve both problems too.
>
> both methods allows us to maintain compatibility using 'getSceneCache'
> and 'getSceneCacheMutex' and calling the correct Singleton.
>
> I prefer 1st solution but maybe you have another idea or solution to
> this issue. Thoughts?
>
> Cheers,
> Rafa.
>
> --
> Rafael Gaitán Linares
> CTO at Mirage Technologies S.L - http://www.mirage-tech.com
> gvSIG3D Developer - http://gvsig3d.blogspot.com



-- 
Rafael Gaitán Linares
CTO at Mirage Technologies S.L - http://www.mirage-tech.com
gvSIG3D Developer - http://gvsig3d.blogspot.com
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to