[Ace-users] ACE_Singleton and StructuredEvent causes segfault on exit

christian.galli at gmail.com christian.galli at gmail.com
Wed Jan 16 13:21:10 CST 2008


Makes sense, I'll do that. Thanks for the quick response.

On Jan 16, 11:21 am, schm... at dre.vanderbilt.edu (Douglas C. Schmidt)
wrote:
> Hi Christian,
>
>    Thanks for using the PRF.
>
>
>
> >    ACE VERSION: 5.6
>
> >    HOST MACHINE and OPERATING SYSTEM: Redhat Enterprise Linux 4.2
>
> >    TARGET MACHINE and OPERATING SYSTEM, if different from HOST:
> >    COMPILER NAME AND VERSION (AND PATCHLEVEL): GCC 3.4.4
>
> >    THE $ACE_ROOT/ace/config.h FILE:
> >        #define ACE_HAS_VALGRIND 1
> >        #define ACE_HAS_ICMP_SUPPORT 1
> >        #include "config-linux.h"
> >        #undef ACE_LACKS_MKSTEMP_PROTOTYPE
>
> >    THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE:
> >        platform_linux.GNU
>
> >    CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/
> >default.features:
> >        Default Contents
>
> >    AREA/CLASS/EXAMPLE AFFECTED: ACE_Singleton and StructuredEvent
>
> >    DOES THE PROBLEM AFFECT: EXECUTION
>
> >    SYNOPSIS:
> >       StructuredEvent stored inside an ACE_Singleton causes segfault
> >       on exit/cleanup.
>
> >    DESCRIPTION:
> >       Storing a StructuredEvent inside an ACE_Singleton, and putting
> >something
> >       in the remainder_of_body causes a segmentation fault on
> >returning
> >       from main (during exit/cleanup).
>
> Right, this is occurring because the ORB (and its associated
> datastructures) are being destroyed before the ACE_Singleton runs.  I
> recommend that you consider using the ACE_Unmanaged_Singleton and
> explicitly delete it before you exit main.
>
> Thanks,
>
>         Doug
>
>
>
> >--- Backtrace of SegFault ---
>
> >[christian at gyoza StructuredEvent]$ gdb TestEvent
> >GNU gdb Red Hat Linux (6.3.0.0-1.63rh)
> >Copyright 2004 Free Software Foundation, Inc.
> >GDB is free software, covered by the GNU General Public License, and
> >you are
> >welcome to change it and/or distribute copies of it under certain
> >conditions.
> >Type "show copying" to see the conditions.
> >There is absolutely no warranty for GDB.  Type "show warranty" for
> >details.
> >This GDB was configured as "i386-redhat-linux-gnu"...Using host
> >libthread_db library "/lib/tls/libthread_db.so.1".
>
> >(gdb) run
> >Starting program: /home/christian/test/StructuredEvent/TestEvent
> >Reading symbols from shared object read from target memory...done.
> >Loaded system supplied DSO at 0x2c9000
> >[Thread debugging using libthread_db enabled]
> >[New Thread -1215997728 (LWP 15561)]
> >pure virtual method called
> >terminate called without an active exception
>
> >Program received signal SIGABRT, Aborted.
> >[Switching to Thread -1215997728 (LWP 15561)]
> >0x002c9402 in __kernel_vsyscall ()
> >(gdb) bt
> >#0  0x002c9402 in __kernel_vsyscall ()
> >#1  0x0030a7d5 in raise () from /lib/tls/libc.so.6
> >#2  0x0030c149 in abort () from /lib/tls/libc.so.6
> >#3  0x0063725e in __gnu_cxx::__verbose_terminate_handler () from /usr/
> >lib/libstdc++.so.6
> >#4  0x00634ef1 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.
> >6
> >#5  0x00634f26 in std::terminate () from /usr/lib/libstdc++.so.6
> >#6  0x006355d5 in __cxa_pure_virtual () from /usr/lib/libstdc++.so.6
> >#7  0xb7a8e592 in CORBA::release (obj=0xb79ccb74)
> >    at /home/christian/COTS/ACE_5.6.1_debug/ACE_wrappers/TAO/tao/
> >AnyTypeCode/TypeCode.inl:17
> >#8  0xb7941e65 in TAO::Any_Impl::free_value (this=0x971a5c8) at
> >AnyTypeCode/Any_Impl.cpp:48
> >#9  0xb7941fb0 in TAO::Any_Impl::_remove_ref (this=0x971a5c8) at
> >AnyTypeCode/Any_Impl.cpp:104
> >#10 0xb79396b2 in CORBA::Any::~Any ()
> >    at /home/christian/COTS/ACE_5.6.1_debug/ACE_wrappers/TAO/tao/
> >SystemException.inl:112
> >#11 0x08049686 in ~StructuredEvent (this=0x971a55c) at TestEvent.cpp:
> >11
> >#12 0x08049a43 in ~SingletonImpl (this=0x971a55c) at TestEvent.cpp:17
> >#13 0x08049a67 in ~ACE_Singleton (this=0x971a558) at TestEvent.cpp:77
> >#14 0x08049ada in ACE_Singleton<SingletonImpl,
> >ACE_Null_Mutex>::cleanup (this=0x971a558)
> >    at /home/christian/COTS/ACE_5.6.1_debug/ACE_wrappers/ace/
> >Singleton.cpp:111
> >#15 0xb7e56917 in ace_cleanup_destroyer (object=0x971a558, param=0x0)
> >at Cleanup.cpp:33
> >#16 0xb7e56e11 in ACE_OS_Exit_Info::call_hooks (this=0x9715138) at
> >Cleanup.cpp:181
> >#17 0xb7e8eb0e in ACE_Object_Manager::fini (this=0x9715128) at
> >Object_Manager.cpp:609
> >#18 0xb7e8df5e in ~ACE_Object_Manager (this=0x9715128) at
> >Object_Manager.cpp:318
> >#19 0xb7e8ef1c in ~ACE_Object_Manager_Manager (this=0xb7f36890) at
> >Object_Manager.cpp:765
> >#20 0xb7e8f0dc in __tcf_0 () at Object_Manager.cpp:773
> >#21 0x0030d6e4 in __cxa_finalize () from /lib/tls/libc.so.6
> >#22 0xb7e080ce in __do_global_dtors_aux () from /home/christian/COTS/
> >ACE_5.6.1_debug/ACE_wrappers/lib/libACE.so.5.6.0
> >#23 0xb7ee15f6 in _fini () from /home/christian/COTS/ACE_5.6.1_debug/
> >ACE_wrappers/lib/libACE.so.5.6.0
> >#24 0x002d6887 in _dl_fini () from /lib/ld-linux.so.2
> >#25 0x0030d467 in exit () from /lib/tls/libc.so.6
> >#26 0x002f7e2d in __libc_start_main () from /lib/tls/libc.so.6
> >#27 0x08049169 in _start ()
> >(gdb) quit
>
> >--- End Backtrace ---
>
> >    REPEAT BY:
>
> >--- Test Program ---
>
> >#include <orbsvcs/CosNotificationC.h>
> >#include <ace/Singleton.h>
> >#include <list>
>
> >class SingletonImpl
> >{
> >private:
> >   friend class ACE_Singleton<SingletonImpl, ACE_Null_Mutex>;
>
> >   SingletonImpl()
> >   {
> >      CORBA::Long testVal=1234L;
> >      m_event.remainder_of_body <<= testVal;
> >   }
>
> >   ~SingletonImpl()
> >   {
> >   }
>
> >   CosNotification::StructuredEvent m_event;
> >};
>
> >typedef ACE_Singleton<SingletonImpl, ACE_Null_Mutex> SingletonTest;
>
> >int main(int argc, char* argv[])
> >{
> >   SingletonTest::instance();
> >   return 0;
> >}
>
> >--- End Test Program ---
>
> >    SAMPLE FIX/WORKAROUND: Manually destroy singleton before exiting
> >main.
>
> --
> Dr. Douglas C. Schmidt                       Professor and Associate Chair
> Electrical Engineering and Computer Science  TEL: (615) 343-8197
> Vanderbilt University                        WEB:www.dre.vanderbilt.edu/~schmidt
> Nashville, TN 37203                          NET: d.schm... at vanderbilt.edu



More information about the Ace-users mailing list