[ET Trac] [Einstein Toolkit] #1363: Crash on startup in Piraha
Einstein Toolkit
trac-noreply at einsteintoolkit.org
Wed May 15 15:59:44 CDT 2013
#1363: Crash on startup in Piraha
----------------------+-----------------------------------------------------
Reporter: eschnett | Owner:
Type: defect | Status: new
Priority: blocker | Milestone: ET_2013_05
Component: Other | Version:
Keywords: |
----------------------+-----------------------------------------------------
I built a Cactus configuration with fewer thorns than usual, and with
assertions disabled (-DNDEBUG. This configuration does not start; it
crashes on startup with a backtrace
{{{
#0 std::_Rb_tree<void*, void*, std::_Identity<void*>, std::less<void*>,
std::allocator<void*> >::_M_insert_unique<void* const&> (this=0x0,
__v=@0x7fff5fbfd228) at locale_facets.h:1078
#1 0x000000010072e6f2 in smart_ptr<piraha::Grammar>::smart_ptr
(this=0x104b9d0d0, ptr=0x10570a5a0, array_=<value temporarily unavailable,
due to optimizations>) at stl_set.h:415
#2 0x0000000100721542 in piraha::AutoGrammar::reparserGenerator () at
AutoGrammar.cc:6
#3 0x0000000100c2ada6 in _GLOBAL__sub_I_Grammar.cc () at smart_ptr.hpp:53
#4 0x00007fff5fc13762 in
__dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE
()
}}}
This indicates that the failure oocurs during initialisation of a global
variable during startup. _Rb_tree points to a set or a map. This may be
caused by
{{{
extern smart_ptr<Grammar> pegGrammar;
}}}
I also see that Piraha has some code in smart_ptr.hpp that is only added
when DNEBUG is defined, and contains assert calls (!). Given that NDEBUG
disables assert, this looks like an error.
It is considered bad style to use C++ constructors to initialise global
variables; this is fragile and breaks often. I suggest instead to change
these global variables to pointers, to initialise them to NULL, and to
allocate to respective objects explicitly at run time. This is safer, as
it ensures that things are allocated in the right order.
I also just see that there is a global variables called "ptrs" in Piraha.
This is not good; please use a cctki_ prefix for all globally visible
variables and functions (or move them into a namespace).
--
Ticket URL: <https://trac.einsteintoolkit.org/ticket/1363>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit
More information about the Trac
mailing list