Icinga / icinga2

The core of our monitoring platform with a powerful configuration language and REST API.
https://icinga.com/docs/icinga2/latest
GNU General Public License v2.0
2k stars 574 forks source link

[dev.icinga.com #10596] Deadlock in MacroProcessor::EvaluateFunction #3645

Closed icinga-migration closed 8 years ago

icinga-migration commented 8 years ago

This issue has been migrated from Redmine: https://dev.icinga.com/issues/10596

Created by mfriedrich on 2015-11-10 13:30:48 +00:00

Assignee: gbeutner Status: Resolved (closed on 2015-11-11 09:25:03 +00:00) Target Version: 2.4.0 Last Update: 2015-11-12 15:34:54 +00:00 (in Redmine)

Icinga Version: 2.4.0
Backport?: No
Include in Changelog: 1

mbmif /usr/local/icinga2/etc/icinga2/tests (master) # icinga2 daemon -X -x warning
Breakpoint encountered in /usr/local/icinga2/etc/icinga2/tests/script-debugger.conf: 24:5-24:12
You can inspect expressions (such as variables) by entering them at the prompt.
To leave the debugger and continue the program use "$continue".
<1> => this
/Users/michi/coding/icinga/icinga2/lib/base/objectlock.hpp:59: assertion failed: !m_Object->OwnsLock()
Caught SIGABRT.
Current time: 2015-11-10 14:26:52 +0100

[2015-11-10 14:26:52 +0100] critical/Application: Icinga 2 has terminated unexpectedly. Additional information can be found in '/usr/local/icinga2/var/log/icinga2/crash/report.1447162012.760422'

Context:
    (0) Resolving macros for string '$dummy_text$'
    (1) Executing check for object 'script-debugger-host-02'

Abort trap: 6

(lldb) bt
* thread #3: tid = 0x205763, 0x00007fff8d8b90ae libsystem_kernel.dylib`__pthread_kill + 10, stop reason = signal SIGABRT
  * frame #0: 0x00007fff8d8b90ae libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff8978e500 libsystem_pthread.dylib`pthread_kill + 90
    frame #2: 0x00007fff859aa37b libsystem_c.dylib`abort + 129
    frame #3: 0x0000000100f3f071 libbase.dylib`icinga_assert_fail(expr="!m_Object->OwnsLock()", file="/Users/michi/coding/icinga/icinga2/lib/base/objectlock.hpp", line=59) + 65 at debug.hpp:55
    frame #4: 0x0000000100f4eab0 libbase.dylib`icinga::ObjectLock::Lock(this=0x00007000000fc5e8) + 128 at objectlock.hpp:59
    frame #5: 0x0000000100f8d2e2 libbase.dylib`icinga::ObjectLock::ObjectLock(this=0x00007000000fc5e8, object=0x00007000000fc5e0) + 66 at objectlock.hpp:46
    frame #6: 0x0000000100f8c53d libbase.dylib`icinga::ObjectLock::ObjectLock(this=0x00007000000fc5e8, object=0x00007000000fc5e0) + 29 at objectlock.hpp:44
    frame #7: 0x00000001010db49c libbase.dylib`SerializeArray(input=0x00007000000fc6a0, attributeTypes=0) + 156 at serializer.cpp:32
    frame #8: 0x00000001010db260 libbase.dylib`icinga::Serialize(value=0x00007000000fc808, attributeTypes=0) + 144 at serializer.cpp:160
    frame #9: 0x00000001010dc02e libbase.dylib`SerializeObject(input=0x00007000000fc8b8, attributeTypes=0) + 590 at serializer.cpp:69
    frame #10: 0x00000001010db35c libbase.dylib`icinga::Serialize(value=0x00007000000fca88, attributeTypes=0) + 396 at serializer.cpp:167
    frame #11: 0x00000001010dbc95 libbase.dylib`SerializeDictionary(input=0x00007000000fcae8, attributeTypes=0) + 1141 at serializer.cpp:48
    frame #12: 0x00000001010db2fb libbase.dylib`icinga::Serialize(value=0x00007000000fdea8, attributeTypes=0) + 299 at serializer.cpp:165
    frame #13: 0x00000001002f9c0a libcli.dylib`icinga::ConsoleCommand::RunScriptConsole(scriptFrame=0x00007000000ff5e0, addr=0x00007000000fdfb0, session=0x00007000000fdf98, commandOnce=0x00007000000fdf80) + 6474 at consolecommand.cpp:289
    frame #14: 0x00000001002f71ac libcli.dylib`icinga::ConsoleCommand::BreakpointHandler(frame=0x00007000000ff5e0, ex=0x0000000000000000, di=0x0000000101ed74b8) + 748 at consolecommand.cpp:77
    frame #15: 0x000000010031fcc2 libcli.dylib`boost::detail::function::void_function_invoker3::invoke(function_ptr=0x0000000101906b40, a0=0x00007000000ff5e0, a1=0x0000000000000000, a2=0x0000000101ed74b8) + 98 at function_template.hpp:118
    frame #16: 0x0000000100d7455b libconfig.dylib`boost::function3::operator(this=0x0000000101906b38, a0=0x00007000000ff5e0, a1=0x0000000000000000, a2=0x0000000101ed74b8)(icinga::ScriptFrame&, icinga::ScriptError*, icinga::DebugInfo const&) const + 203 at function_template.hpp:772
    frame #17: 0x0000000100d74485 libconfig.dylib`boost::signals2::detail::void_type boost::signals2::detail::call_with_tuple_args::m_invoke @ 0x00007000000fe120, args=tuple @ 0x00007000000fe170)>, 0u, 1u, 2u, icinga::ScriptFrame&, icinga::ScriptError*&, icinga::DebugInfo const&>(void*, boost::function&, boost::signals2::detail::unsigned_meta_array<0u, 1u, 2u>, std::__1::tuple) const + 117 at variadic_slot_invoker.hpp:92
    frame #18: 0x0000000100d743dd libconfig.dylib`boost::signals2::detail::void_type boost::signals2::detail::call_with_tuple_args::operator(this=0x00007000000fe308, func=0x0000000101906b38, args=tuple @ 0x00007000000fe2c0, (null)=size_t<3> @ 0x00007000000fe1c8), icinga::ScriptFrame&, icinga::ScriptError*&, icinga::DebugInfo const&, 3ul>(boost::function&, std::__1::tuple, mpl_::size_t<3ul>) const + 445 at variadic_slot_invoker.hpp:81
    frame #19: 0x0000000100d74217 libconfig.dylib`boost::signals2::detail::void_type boost::signals2::detail::variadic_slot_invoker::m_invoke >, boost::signals2::slot >, boost::signals2::mutex> > >(boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > const&, boost::signals2::detail::void_type const*) const + 119 at variadic_slot_invoker.hpp:127
    frame #20: 0x0000000100d73f89 libconfig.dylib`boost::signals2::detail::void_type boost::signals2::detail::variadic_slot_invoker::operator(this=0x00007000000fe818, connectionBody=0x0000000101906bc0) >, boost::signals2::slot >, boost::signals2::mutex> > >(boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > const&) const + 41 at variadic_slot_invoker.hpp:119
    frame #21: 0x0000000100d73e1b libconfig.dylib`boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >::dereference(this=0x00007000000fe490) const + 107 at slot_call_iterator.hpp:82
    frame #22: 0x0000000100d73d85 libconfig.dylib`boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >::reference boost::iterators::iterator_core_access::dereference, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > >(boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > const&) + 21 at iterator_facade.hpp:540
    frame #23: 0x0000000100d73cbd libconfig.dylib`boost::iterators::detail::iterator_facade_base, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >, boost::signals2::detail::void_type, boost::iterators::single_pass_traversal_tag, boost::signals2::detail::void_type const&, long, false, false>::operator*(this=0x00007000000fe490) const + 29 at iterator_facade.hpp:646
    frame #24: 0x0000000100d73bf5 libconfig.dylib`void boost::signals2::optional_last_value::operator(this=0x0000000101900820, first=slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void *>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > @ 0x00007000000fe490, last=slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void *>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > @ 0x00007000000fe4b0), std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > >(boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >, boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >) const + 69 at optional_last_value.hpp:55
    frame #25: 0x0000000100d6f54f libconfig.dylib`void boost::signals2::detail::combiner_invoker::operator(this=0x00007000000fe670, combiner=0x0000000101900820, first=slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void *>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > @ 0x00007000000fe530, last=slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void *>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > @ 0x00007000000fe550), boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> > >(boost::signals2::optional_last_value&, boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >, boost::signals2::detail::slot_call_iterator_t, std::__1::__list_iterator >, boost::signals2::slot >, boost::signals2::mutex> >, void*>, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >) const + 175 at result_type_wrapper.hpp:64
    frame #26: 0x0000000100d6f10b libconfig.dylib`boost::signals2::detail::signal_impl, int, std::__1::less, boost::function, boost::function, boost::signals2::mutex>::operator(this=0x00000001019007c0, args=0x00007000000ff5e0, args=0x0000000000000000, args=0x0000000101ed74b8)(icinga::ScriptFrame&, icinga::ScriptError*, icinga::DebugInfo const&) + 1003 at signal_template.hpp:241
    frame #27: 0x0000000100d58a2f libconfig.dylib`boost::signals2::signal, int, std::__1::less, boost::function, boost::function, boost::signals2::mutex>::operator(this=0x0000000100da55e8, args=0x00007000000ff5e0, args=0x0000000000000000, args=0x0000000101ed74b8)(icinga::ScriptFrame&, icinga::ScriptError*, icinga::DebugInfo const&) + 63 at signal_template.hpp:718
    frame #28: 0x0000000100d4cc6d libconfig.dylib`icinga::Expression::ScriptBreakpoint(frame=0x00007000000ff5e0, ex=0x0000000000000000, di=0x0000000101ed74b8) + 125 at expression.cpp:49
    frame #29: 0x0000000100d58559 libconfig.dylib`icinga::BreakpointExpression::DoEvaluate(this=0x0000000101ed74b0, frame=0x00007000000ff5e0, dhint=0x0000000000000000) const + 73 at expression.cpp:880
    frame #30: 0x0000000100d4ccce libconfig.dylib`icinga::Expression::Evaluate(this=0x0000000101ed74b0, frame=0x00007000000ff5e0, dhint=0x0000000000000000) const + 78 at expression.cpp:64
    frame #31: 0x0000000100d53141 libconfig.dylib`icinga::DictExpression::DoEvaluate(this=0x0000000101ed7520, frame=0x00007000000ff5e0, dhint=0x0000000000000000) const + 977 at expression.cpp:475
    frame #32: 0x0000000100d4ccce libconfig.dylib`icinga::Expression::Evaluate(this=0x0000000101ed7520, frame=0x00007000000ff5e0, dhint=0x0000000000000000) const + 78 at expression.cpp:64
    frame #33: 0x0000000100d64e3e libconfig.dylib`icinga::VMOps::FunctionWrapper(arguments=size=0, funcargs=size=0, closedVars=0x0000000106818140, expr=0x0000000106818148) + 878 at vmops.hpp:350
    frame #34: 0x0000000100d667aa libconfig.dylib`icinga::Value boost::_bi::list4, boost::_bi::value > >, boost::_bi::value >, boost::_bi::value > >::operator(this=0x0000000106818128, (null)=type @ 0x00007000000ff058, f=0x0000000106818120, a=0x00007000000ff098, (null)=0) > const&, std::__1::vector > const&, boost::intrusive_ptr const&, boost::shared_ptr const&), boost::_bi::list1 > const&> >(boost::_bi::type, icinga::Value (*&)(std::__1::vector > const&, std::__1::vector > const&, boost::intrusive_ptr const&, boost::shared_ptr const&), boost::_bi::list1 > const&>&, long) + 186 at bind.hpp:447
    frame #35: 0x0000000100d666e4 libconfig.dylib`icinga::Value boost::_bi::bind_t > const&, std::__1::vector > const&, boost::intrusive_ptr const&, boost::shared_ptr const&), boost::_bi::list4, boost::_bi::value > >, boost::_bi::value >, boost::_bi::value > > >::operator(this=0x0000000106818120, a1=size=0) > const&>(std::__1::vector > const&&&) + 84 at bind.hpp:905
    frame #36: 0x0000000100d6641a libconfig.dylib`boost::detail::function::function_obj_invoker1 > const&, std::__1::vector > const&, boost::intrusive_ptr const&, boost::shared_ptr const&), boost::_bi::list4, boost::_bi::value > >, boost::_bi::value >, boost::_bi::value > > >, icinga::Value, std::__1::vector > const&>::invoke(function_obj_ptr=0x0000000106828e88, a0=size=0) + 74 at function_template.hpp:138
    frame #37: 0x00000001010c680d libbase.dylib`boost::function1 > const&>::operator(this=0x0000000106828e80, a0=size=0)(std::__1::vector > const&) const + 173 at function_template.hpp:772
    frame #38: 0x00000001010c64d6 libbase.dylib`icinga::Function::Invoke(this=0x0000000106828e60, arguments=size=0) + 54 at function.cpp:34
    frame #39: 0x0000000103adf20d libicinga.dylib`icinga::MacroProcessor::EvaluateFunction(func=0x00007000000ffae8, resolvers=size=3, cr=0x0000700000101858, escapeFn=0x00007000000fff88, resolvedMacros=0x0000700000102148, useResolvedMacros=false, recursionLevel=3)> const&, boost::intrusive_ptr const&, bool, int) + 2557 at macroprocessor.cpp:222
    frame #40: 0x0000000103add903 libicinga.dylib`icinga::MacroProcessor::InternalResolveMacros(str=0x00007000000fffa8, resolvers=size=3, cr=0x0000700000101858, missingMacro=0x0000000000000000, escapeFn=0x00007000000fff88, resolvedMacros=0x0000700000102148, useResolvedMacros=false, recursionLevel=2)> const&, boost::intrusive_ptr const&, bool, int) + 1459 at macroprocessor.cpp:269
    frame #41: 0x0000000103adc736 libicinga.dylib`icinga::MacroProcessor::ResolveMacros(str=0x00007000001016b8, resolvers=size=3, cr=0x0000700000101858, missingMacro=0x0000000000000000, escapeFn=0x0000700000100bc0, resolvedMacros=0x0000700000102148, useResolvedMacros=false, recursionLevel=1)> const&, boost::intrusive_ptr const&, bool, int) + 1510 at macroprocessor.cpp:60
    frame #42: 0x0000000103ae1216 libicinga.dylib`icinga::MacroProcessor::ResolveArguments(command=0x00007000001016b8, arguments=0x00007000001014c0, resolvers=size=3, cr=0x0000700000101858, resolvedMacros=0x0000700000102148, useResolvedMacros=false, recursionLevel=0) + 374 at macroprocessor.cpp:455
    frame #43: 0x0000000103b4d766 libicinga.dylib`icinga::PluginUtility::ExecuteCommand(commandObj=0x0000700000101868, checkable=0x0000700000102158, cr=0x0000700000101858, macroResolvers=size=3, resolvedMacros=0x0000700000102148, useResolvedMacros=false, callback=0x0000700000101838)> const&) + 278 at pluginutility.cpp:47
    frame #44: 0x0000000101f2a325 libmethods.dylib`icinga::PluginCheckTask::ScriptFunc(checkable=0x0000700000102158, cr=0x0000700000102150, resolvedMacros=0x0000700000102148, useResolvedMacros=false) + 4757 at pluginchecktask.cpp:55
    frame #45: 0x0000000101f08e97 libmethods.dylib`icinga::Value icinga::FunctionWrapperV const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool>(function=(libmethods.dylib`icinga::PluginCheckTask::ScriptFunc(boost::intrusive_ptr const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool) at pluginchecktask.cpp:41), arguments=size=4)(boost::intrusive_ptr const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool), std::__1::vector > const&) + 759 at functionwrapper.hpp:171
    frame #46: 0x0000000101f0faef libmethods.dylib`icinga::Value boost::_bi::list2 const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool)>, boost::arg<1> >::operator(this=0x000000010192c480, (null)=type @ 0x0000700000102288, f=0x000000010192c478, a=0x00007000001022c8, (null)=0) const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool), std::__1::vector > const&), boost::_bi::list1 > const&> >(boost::_bi::type, icinga::Value (*&)(void (*)(boost::intrusive_ptr const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool), std::__1::vector > const&), boost::_bi::list1 > const&>&, long) + 127 at bind.hpp:303
    frame #47: 0x0000000101f0fa24 libmethods.dylib`icinga::Value boost::_bi::bind_t const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool), std::__1::vector > const&), boost::_bi::list2 const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool)>, boost::arg<1> > >::operator(this=0x000000010192c478, a1=size=4) > const&>(std::__1::vector > const&&&) + 84 at bind.hpp:905
    frame #48: 0x0000000101f0f7e7 libmethods.dylib`boost::detail::function::function_obj_invoker1 const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool), std::__1::vector > const&), boost::_bi::list2 const&, boost::intrusive_ptr const&, boost::intrusive_ptr const&, bool)>, boost::arg<1> > >, icinga::Value, std::__1::vector > const&>::invoke(function_obj_ptr=0x000000010192c478, a0=size=4) + 71 at function_template.hpp:138
    frame #49: 0x00000001010c680d libbase.dylib`boost::function1 > const&>::operator(this=0x000000010192c470, a0=size=4)(std::__1::vector > const&) const + 173 at function_template.hpp:772
    frame #50: 0x00000001010c64d6 libbase.dylib`icinga::Function::Invoke(this=0x000000010192c450, arguments=size=4) + 54 at function.cpp:34
    frame #51: 0x000000010390a87f libicinga.dylib`icinga::CheckCommand::Execute(this=0x0000000101ee9390, checkable=0x0000700000102d38, cr=0x0000700000102d68, resolvedMacros=0x0000700000102d30, useResolvedMacros=false) + 2127 at checkcommand.cpp:36
    frame #52: 0x0000000103b79dca libicinga.dylib`icinga::Checkable::ExecuteCheck(this=0x0000000102019c00) + 1578 at checkable-check.cpp:423
    frame #53: 0x000000010457028e libchecker.dylib`icinga::CheckerComponent::ExecuteCheckHelper(this=0x0000000101a3e0f0, checkable=0x0000000101a44428) + 62 at checkercomponent.cpp:200
    frame #54: 0x00000001045d4bdc libchecker.dylib`void boost::_mfi::mf1 const&>::call, boost::intrusive_ptr const>(this=0x0000000101a44410, u=0x0000000101a44420, (null)=0x0000000000000000, b1=0x0000000101a44428) const + 140 at mem_fn_template.hpp:156
    frame #55: 0x00000001045d4b01 libchecker.dylib`void boost::_mfi::mf1 const&>::operator(this=0x0000000101a44410, u=0x0000000101a44420, a1=0x0000000101a44428) >(boost::intrusive_ptr&, boost::intrusive_ptr const&) const + 49 at mem_fn_template.hpp:171
    frame #56: 0x00000001045d4abf libchecker.dylib`void boost::_bi::list2 >, boost::_bi::value > >::operator(this=0x0000000101a44420, (null)=type @ 0x0000700000103498, f=0x0000000101a44410, a=0x00007000001034c0, (null)=0) const&>, boost::_bi::list0>(boost::_bi::type, boost::_mfi::mf1 const&>&, boost::_bi::list0&, int) + 111 at bind.hpp:313
    frame #57: 0x00000001045d4a3c libchecker.dylib`boost::_bi::bind_t const&>, boost::_bi::list2 >, boost::_bi::value > > >::operator(this=0x0000000101a44410)() + 60 at bind.hpp:893
    frame #58: 0x00000001045d4790 libchecker.dylib`boost::detail::function::void_function_obj_invoker0 const&>, boost::_bi::list2 >, boost::_bi::value > > >, void>::invoke(function_obj_ptr=0x0000700000103a90) + 32 at function_template.hpp:159
    frame #59: 0x0000000100f60b6b libbase.dylib`boost::function0::operator(this=0x0000700000103a88)() const + 123 at function_template.hpp:772
    frame #60: 0x0000000101119bf7 libbase.dylib`icinga::ThreadPool::WorkerThread::ThreadProc(this=0x00000001011c01f0, queue=0x00000001011c0088) + 2311 at threadpool.cpp:138
    frame #61: 0x00000001011233fa libbase.dylib`boost::_mfi::mf1::operator(this=0x0000000101907420, t=0x00000001011c01f0, a1=0x00000001011c0088)(icinga::ThreadPool::WorkerThread&, icinga::ThreadPool::Queue&) const + 122 at mem_fn_template.hpp:186
    frame #62: 0x000000010112334f libbase.dylib`void boost::_bi::list2, boost::reference_wrapper >::operator(this=0x0000000101907430, (null)=type @ 0x0000700000103e58, f=0x0000000101907420, a=0x0000700000103e80, (null)=0), boost::_bi::list0>(boost::_bi::type, boost::_mfi::mf1&, boost::_bi::list0&, int) + 111 at bind.hpp:313
    frame #63: 0x00000001011232cc libbase.dylib`boost::_bi::bind_t, boost::_bi::list2, boost::reference_wrapper > >::operator(this=0x0000000101907420)() + 60 at bind.hpp:893
    frame #64: 0x000000010112325c libbase.dylib`boost::detail::thread_data, boost::_bi::list2, boost::reference_wrapper > > >::run(this=0x0000000101907220) + 28 at thread.hpp:116
    frame #65: 0x0000000100081715 libboost_thread-mt.dylib`boost::(anonymous namespace)::thread_proxy(void*) + 53
    frame #66: 0x00007fff8978b9b1 libsystem_pthread.dylib`_pthread_body + 131
    frame #67: 0x00007fff8978b92e libsystem_pthread.dylib`_pthread_start + 168
    frame #68: 0x00007fff89789385 libsystem_pthread.dylib`thread_start + 13

Changesets

2015-11-11 09:21:30 +00:00 by (unknown) e3c75faabc233e997c8f0a7463dd44455e87c694

Implement support for recursive object locks

fixes #10596
icinga-migration commented 8 years ago

Updated by mfriedrich on 2015-11-10 13:51:02 +00:00

icinga-migration commented 8 years ago

Updated by Anonymous on 2015-11-11 09:25:03 +00:00

Applied in changeset e3c75faabc233e997c8f0a7463dd44455e87c694.

icinga-migration commented 8 years ago

Updated by mfriedrich on 2015-11-12 15:34:54 +00:00