summaryrefslogtreecommitdiff
path: root/wscript
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-03-10 20:53:58 +0100
committerRobin Gareus <robin@gareus.org>2020-03-10 20:55:50 +0100
commita254ce22a8c7c216e777480acf9e6597aa589931 (patch)
tree1c543008f5cd5e139dfcea40fe2e4e3b332c4729 /wscript
parentebd743d7951256d420bc4375b60e723f9a47c052 (diff)
Fix optimized mingw/gcc-8.2 builds
gcc-8.2 -O3 optimization enables -finline-functions. For reasons yet unknown this causes issues with Glib::Threads::Private when loading sessions (creating new ones is fine) and likely some other operations. Without this change the following happens (5.12 as well as current git) when loading an existing session: --- [Switching to Thread 6092.0x12fc] Breakpoint 1, ARDOUR::SessionEvent::create_per_thread_pool (name=..., nitems=4096) at ../libs/ardour/session_events.cc:60 60 in ../libs/ardour/session_events.cc $6 = (const std::__cxx11::string &) @0x210dfc60: {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x210dfc70 "GUI"}, _M_string_length = 3, {_M_local_buf = "GUI\000\000\000\000\000<E0>P<DA>:\000\000\000", _M_allocated_capacity = 4805959}} #0 ARDOUR::SessionEvent::create_per_thread_pool (name=..., nitems=4096) at ../libs/ardour/session_events.cc:60 #1 0x0000000000434e77 in ?? () [..] Thread 1 (Thread 6092.0x12fc): #0 0x0000000061f152ef in PBD::RingBuffer<void*>::write (this=this@entry=0x50, src=src@entry=0x210dcdc8, cnt=cnt@entry=1) at ../libs/pbd/pbd/ringbuffer.h:170 #1 0x0000000061ee954d in push (t=<optimized out>, this=0x0) at ../libs/pbd/pool.cc:290 #2 CrossThreadPool::flush_pending_with_ev (this=0x0, ptr=<optimized out>) at ../libs/pbd/pool.cc:254 #3 0x00000000218d5b01 in operator() (a0=0x210dcdc8, this=0x48) at /home/ardour/win-stack-w64/include/boost/function/function_template.hpp:682 #4 operator()<boost::function<void(ARDOUR::SessionEvent*)>, boost::_bi::list0> (a=<synthetic pointer>, f=..., this=0x68) at /home/ardour/win-stack-w64/include/boost/bind/bind.hpp:259 #5 operator() (this=0x48) at /home/ardour/win-stack-w64/include/boost/bind/bind.hpp:1294 #6 boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<boost::_bi::unspecified, boost::function<void (ARDOUR::SessionEvent*)>, boost::_bi::list1<boost::_bi::value<ARDOUR::SessionEvent*> > >, void>::invoke(boost::detail::function::function_buffer&) (function_obj_ptr=...) at /home/ardour/win-stack-w64/include/boost/function/function_template.hpp:159 #7 0x0000000063e2dc39 in operator() (this=0x210dcf70) at /home/ardour/win-stack-w64/include/boost/function/function_template.hpp:682 #8 AbstractUI<Gtkmm2ext::UIRequest>::call_slot(PBD::EventLoop::InvalidationRecord*, boost::function<void ()> const&) (this=0x3ada50e0, invalidation=0x0, f=...) at ../libs/pbd/pbd/abstract_ui.cc:434 #9 0x00000000216cbb96 in ARDOUR::SessionEventManager::merge_event (this=<optimized out>, ev=<optimized out>) at /home/ardour/win-stack-w64/include/boost/function/function_template.hpp:507 #10 0x00000000216e3861 in non-virtual thunk to ARDOUR::Session::queue_event(ARDOUR::SessionEvent*) () at ../../win-stack-w64/include/glibmm-2.4/glibmm/threads.h:709 #11 0x00000000216c91bf in ARDOUR::SessionEventManager::clear_events(ARDOUR::SessionEvent::Type, boost::function<void ()>) (this=this@entry=0x4256cc08, type=type@entry=ARDOUR::SessionEvent::Skip, after=...) at ../libs/ardour/session_events.cc:156 #12 0x000000002168874a in ARDOUR::Session::sync_locations_to_skips (this=this@entry=0x4256ca90) at /usr/lib/gcc/x86_64-w64-mingw32/8.3-posix/include/c++/new:169 #13 0x0000000021688802 in ARDOUR::Session::update_skips (this=this@entry=0x4256ca90, loc=loc@entry=0x0, consolidate=consolidate@entry=false) at ../libs/ardour/session.cc:1683 #14 0x0000000021699649 in _locations_changed (locations=..., this=0x4256ca90) at ../libs/ardour/session.cc:1859 #15 apply<ARDOUR::Session> (method= (void (ARDOUR::Session::*)(ARDOUR::Session * const, const ARDOUR::Locations::LocationList &)) 0x216994f0 <ARDOUR::Session::_locations_changed(std::__cxx11::list<ARDOUR::Location*, std::allocator<ARDOUR::Location*> > const&)>, obj=..., this=0x40ff4c60) at ../libs/ardour/ardour/location.h:240 #16 ARDOUR::Session::locations_changed (this=this@entry=0x4256ca90) at ../libs/ardour/session.cc:1840 #17 0x0000000021700abd in ARDOUR::Session::set_state (this=0x4256ca90, node=..., version=6000) at ../libs/ardour/session_state.cc:1657 #18 0x0000000021713456 in ARDOUR::Session::post_engine_init (this=this@entry=0x4256ca90) at ../libs/pbd/pbd/xml++.h:81 #19 0x00000000216ad5cd in ARDOUR::Session::Session (this=0x4256ca90, eng=..., fullpath=..., snapshot_name=..., bus_profile=<optimized out>, mix_template=...) at ../libs/ardour/session.cc:383 #20 0x000000000046db8b in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) --- Note that in the trace starting at #19 the source-file references are offset :post_engine_init() isn't in xml++.h (likely debug symbols are incorrect due to inline functions) The application crashes due to #2 ::flush_pending_with_ev (this=0x0 ..) But the earlier breakpoint above shows that the ThreadPool was created, and this #11 ::clear_events() should not assign NULL. (This happens on a single-core CPU, too)
Diffstat (limited to 'wscript')
-rw-r--r--wscript1
1 files changed, 1 insertions, 0 deletions
diff --git a/wscript b/wscript
index a9bb96be06..14540cdedf 100644
--- a/wscript
+++ b/wscript
@@ -549,6 +549,7 @@ int main() { return 0; }''',
# mingw/gcc-8.2
compiler_flags.append(flags_dict['xsaveintrin'])
+ compiler_flags.append('-fno-inline-functions')
# end of processor-specific section