Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

orderBy.limit changefeed segfault / not working #4850

Closed
danielmewes opened this issue Sep 17, 2015 · 6 comments
Closed

orderBy.limit changefeed segfault / not working #4850

danielmewes opened this issue Sep 17, 2015 · 6 comments
Assignees
Milestone

Comments

@danielmewes
Copy link
Member

Reported by @oldlam in #4769 (comment) :

I'm also facing the segmentation fault here, with both 2.1.1 and 2.1.4 on OS X, fresh data,
to reproduce this, create a table "user", then:

r.table('users').indexCreate('time', r.row('createdAt'))
r.table('users').insert({name: 'aaa', createdAt: r.now()})
r.table('users').insert({name: 'bbb', createdAt: r.now()})

r.table('users').orderBy({index: r.desc('time')}).limit(2).changes()

r.table('users').filter({name: 'bbb'}).update({name: 'zzz'}) // this will produce the crash

here is the error message I got after the crash:

error: Error in src/arch/runtime/thread_pool.cc at line 359:
error: Segmentation fault from reading the address 0x8.
error: Backtrace:
error: Thu Sep 17 19:27:47 2015
error: Exiting.

EDIT:
just downloaded 2.0.5 and do the above steps again, it's working without problem.

I couldn't reproduce the segfault on Linux, but I'm also either not getting any results on the changefeed (not even initial results), or I'm getting initial results but not the update for the bbb row.
Which of those two happens appears to depend on which build I'm using (debug mode with Clang vs. a release mode binary from the Ubuntu package).

@mlucy could you check this out please?

@danielmewes
Copy link
Member Author

Valgrind output when running the filter.update while the changefeed is active:

==5690== Thread 6:
==5690== Invalid read of size 8
==5690==    at 0x2044508: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.hpp:242)
==5690==    by 0x1FF256B: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > const&) (changefeed.hpp:284)
==5690==    by 0x1FE4340: ql::changefeed::limit_manager_t::commit(rwlock_in_line_t*, boost::variant<ql::changefeed::primary_ref_t, ql::changefeed::sindex_ref_t, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) (changefeed.cc:1110)
==5690==    by 0x1FC8AB7: rdb_update_single_sindex(store_t*, store_t::sindex_access_t const*, deletion_context_t const*, rdb_modification_report_t const*, unsigned long*, auto_drainer_t::lock_t, cond_t*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*)::$_5::operator()(rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*) const (btree.cc:1521)
==5690==    by 0x1FC86E9: std::_Function_handler<void ()(rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*), rdb_update_single_sindex(store_t*, store_t::sindex_access_t const*, deletion_context_t const*, rdb_modification_report_t const*, unsigned long*, auto_drainer_t::lock_t, cond_t*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*)::$_5>::_M_invoke(std::_Any_data const&, rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*) (functional:1778)
==5690==    by 0x1FF13A2: std::function<void ()(rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*)>::operator()(rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*) const (functional:2160)
==5690==    by 0x1FE00AE: ql::changefeed::server_t::foreach_limit(boost::optional<std::string> const&, store_key_t const*, std::function<void ()(rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*)>, auto_drainer_t::lock_t const&) (changefeed.cc:620)
==5690==    by 0x1FC81D1: rdb_update_single_sindex(store_t*, store_t::sindex_access_t const*, deletion_context_t const*, rdb_modification_report_t const*, unsigned long*, auto_drainer_t::lock_t, cond_t*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*) (btree.cc:1512)
==5690==    by 0x1FCDA3A: _ZNSt5_BindIFPFvP7store_tPKNS0_15sindex_access_tEPK18deletion_context_tPK25rdb_modification_report_tPmN14auto_drainer_t6lock_tEP6cond_tPSt6vectorISt4pairIN2ql7datum_tEN5boost8optionalImEEESaISN_EESQ_ES1_PS2_S7_SA_SB_SD_SF_SQ_SQ_EE6__callIvJEJLi0ELi1ELi2ELi3ELi4ELi5ELi6ELi7ELi8EEEET_OSt5tupleIJDpT0_EESt12_Index_tupleIJXspT1_EEE (functional:1145)
==5690==    by 0x1FCD7F5: _ZNSt5_BindIFPFvP7store_tPKNS0_15sindex_access_tEPK18deletion_context_tPK25rdb_modification_report_tPmN14auto_drainer_t6lock_tEP6cond_tPSt6vectorISt4pairIN2ql7datum_tEN5boost8optionalImEEESaISN_EESQ_ES1_PS2_S7_SA_SB_SD_SF_SQ_SQ_EEclIJEvEET0_DpOT_ (functional:1203)
==5690==    by 0x1FCD71B: callable_action_instance_t<std::_Bind<void (*()(store_t*, store_t::sindex_access_t*, deletion_context_t const*, rdb_modification_report_t const*, unsigned long*, auto_drainer_t::lock_t, cond_t*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*))(store_t*, store_t::sindex_access_t const*, deletion_context_t const*, rdb_modification_report_t const*, unsigned long*, auto_drainer_t::lock_t, cond_t*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*)> >::run_action() (callable_action.hpp:31)
==5690==    by 0x14EF371: callable_action_wrapper_t::run() (runtime_utils.cc:42)
==5690==  Address 0x1b7937b0 is 32 bytes inside a block of size 40 free'd
==5690==    at 0x4C2A4BC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5690==    by 0x204358F: __gnu_cxx::new_allocator<std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::deallocate(std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >*, unsigned long) (new_allocator.h:98)
==5690==    by 0x2043561: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::_M_put_node(std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >*) (stl_tree.h:373)
==5690==    by 0x2043508: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::_M_destroy_node(std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >*) (stl_tree.h:420)
==5690==    by 0x20440CD: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::_M_erase_aux(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >) (stl_tree.h:1490)
==5690==    by 0x2044074: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >) (stl_tree.h:760)
==5690==    by 0x2043FE4: std::set<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >) (stl_set.h:498)
==5690==    by 0x20444FF: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.hpp:241)
==5690==    by 0x1FF256B: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > const&) (changefeed.hpp:284)
==5690==    by 0x1FE4340: ql::changefeed::limit_manager_t::commit(rwlock_in_line_t*, boost::variant<ql::changefeed::primary_ref_t, ql::changefeed::sindex_ref_t, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) (changefeed.cc:1110)
==5690==    by 0x1FC8AB7: rdb_update_single_sindex(store_t*, store_t::sindex_access_t const*, deletion_context_t const*, rdb_modification_report_t const*, unsigned long*, auto_drainer_t::lock_t, cond_t*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*)::$_5::operator()(rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*) const (btree.cc:1521)
==5690==    by 0x1FC86E9: std::_Function_handler<void ()(rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*), rdb_update_single_sindex(store_t*, store_t::sindex_access_t const*, deletion_context_t const*, rdb_modification_report_t const*, unsigned long*, auto_drainer_t::lock_t, cond_t*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*, std::vector<std::pair<ql::datum_t, boost::optional<unsigned long> >, std::allocator<std::pair<ql::datum_t, boost::optional<unsigned long> > > >*)::$_5>::_M_invoke(std::_Any_data const&, rwlock_in_line_t*, rwlock_in_line_t*, rwlock_in_line_t*, ql::changefeed::limit_manager_t*) (functional:1778)
==5690== 
==5690== Thread 26:
==5690== Invalid read of size 8
==5690==    at 0x2044508: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.hpp:242)
==5690==    by 0x1FF256B: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > const&) (changefeed.hpp:284)
==5690==    by 0x1FFFA13: ql::changefeed::limit_sub_t::note_change_impl(boost::optional<std::string> const&, boost::optional<std::pair<std::string, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.cc:2085)
==5690==    by 0x1FFF4CA: ql::changefeed::limit_sub_t::note_change(boost::optional<std::string> const&, boost::optional<std::pair<std::string, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.cc:2061)
==5690==    by 0x202868F: _ZZNK2ql10changefeed13msg_visitor_tclERKNS0_5msg_t14limit_change_tEENKUlPNS0_11limit_sub_tEE_clES7_ (changefeed.cc:2239)
==5690==    by 0x2028381: _ZNSt17_Function_handlerIFvPN2ql10changefeed11limit_sub_tEEZNKS1_13msg_visitor_tclERKNS1_5msg_t14limit_change_tEEUlS3_E_E9_M_invokeERKSt9_Any_dataS3_ (functional:1778)
==5690==    by 0x1FF4C97: std::function<void ()(ql::changefeed::limit_sub_t*)>::operator()(ql::changefeed::limit_sub_t*) const (functional:2160)
==5690==    by 0x2014DD1: void ql::changefeed::feed_t::each_sub_in_vec_cb<ql::changefeed::limit_sub_t>(std::function<void ()(ql::changefeed::limit_sub_t*)> const&, std::vector<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> >, std::allocator<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> > > > const&, std::vector<int, std::allocator<int> > const&, int) (changefeed.cc:2880)
==5690==    by 0x2015B28: std::_Mem_fn<void (ql::changefeed::feed_t::*)(std::function<void ()(ql::changefeed::limit_sub_t*)> const&, std::vector<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> >, std::allocator<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> > > > const&, std::vector<int, std::allocator<int> > const&, int)>::operator()(ql::changefeed::feed_t*, std::function<void ()(ql::changefeed::limit_sub_t*)> const&, std::vector<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> >, std::allocator<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> > > > const&, std::vector<int, std::allocator<int> > const&, int) const (functional:550)
==5690==    by 0x2015A4C: _ZNKSt5_BindIFSt7_Mem_fnIMN2ql10changefeed6feed_tEFvRKSt8functionIFvPNS2_11limit_sub_tEEERKSt6vectorISt3setIS6_St4lessIS6_ESaIS6_EESaISG_EERKSB_IiSaIiEEiEEPS3_St17reference_wrapperIS9_EST_ISJ_EST_ISN_ESt12_PlaceholderILi1EEEE8__call_cIvJRlEJLi0ELi1ELi2ELi3ELi4EEEET_OSt5tupleIJDpT0_EESt12_Index_tupleIJXspT1_EEE (functional:1154)
==5690==    by 0x201593C: _ZNKSt5_BindIFSt7_Mem_fnIMN2ql10changefeed6feed_tEFvRKSt8functionIFvPNS2_11limit_sub_tEEERKSt6vectorISt3setIS6_St4lessIS6_ESaIS6_EESaISG_EERKSB_IiSaIiEEiEEPS3_St17reference_wrapperIS9_EST_ISJ_EST_ISN_ESt12_PlaceholderILi1EEEEclIJRlEvEET0_DpOT_ (functional:1217)
==5690==    by 0x20158C3: pmap_runner_one_arg_t<std::_Bind<std::_Mem_fn<void (ql::changefeed::feed_t::*)(std::function<void ()(ql::changefeed::limit_sub_t*)> const&, std::vector<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> >, std::allocator<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> > > > const&, std::vector<int, std::allocator<int> > const&, int)> ()(ql::changefeed::feed_t*, std::reference_wrapper<std::function<void ()(ql::changefeed::limit_sub_t*)> const>, std::reference_wrapper<std::vector<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> >, std::allocator<std::set<ql::changefeed::limit_sub_t*, std::less<ql::changefeed::limit_sub_t*>, std::allocator<ql::changefeed::limit_sub_t*> > > > const>, std::reference_wrapper<std::vector<int, std::allocator<int> > const>, std::_Placeholder<1>)>, long>::operator()() (pmap.hpp:20)
==5690==  Address 0x1b58c810 is 32 bytes inside a block of size 40 free'd
==5690==    at 0x4C2A4BC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5690==    by 0x204358F: __gnu_cxx::new_allocator<std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::deallocate(std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >*, unsigned long) (new_allocator.h:98)
==5690==    by 0x2043561: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::_M_put_node(std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >*) (stl_tree.h:373)
==5690==    by 0x2043508: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::_M_destroy_node(std::_Rb_tree_node<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >*) (stl_tree.h:420)
==5690==    by 0x20440CD: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::_M_erase_aux(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >) (stl_tree.h:1490)
==5690==    by 0x2044074: std::_Rb_tree<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::_Identity<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >) (stl_tree.h:760)
==5690==    by 0x2043FE4: std::set<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > >, std::function<bool ()(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&)>, std::allocator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > >::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > >) (stl_set.h:498)
==5690==    by 0x20444FF: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.hpp:241)
==5690==    by 0x1FF256B: ql::changefeed::index_queue_t<std::string, ql::datum_t, ql::datum_t, ql::changefeed::limit_order_t>::erase(std::_Rb_tree_const_iterator<std::_Rb_tree_iterator<std::pair<std::string const, std::pair<ql::datum_t, ql::datum_t> > > > const&) (changefeed.hpp:284)
==5690==    by 0x1FFFA13: ql::changefeed::limit_sub_t::note_change_impl(boost::optional<std::string> const&, boost::optional<std::pair<std::string, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.cc:2085)
==5690==    by 0x1FFF4CA: ql::changefeed::limit_sub_t::note_change(boost::optional<std::string> const&, boost::optional<std::pair<std::string, std::pair<ql::datum_t, ql::datum_t> > > const&) (changefeed.cc:2061)
==5690==    by 0x202868F: _ZZNK2ql10changefeed13msg_visitor_tclERKNS0_5msg_t14limit_change_tEENKUlPNS0_11limit_sub_tEE_clES7_ (changefeed.cc:2239)
==5690==

@mlucy
Copy link
Member

mlucy commented Sep 17, 2015

Looking at this now.

@mlucy mlucy assigned deontologician and unassigned mlucy Sep 17, 2015
@mlucy
Copy link
Member

mlucy commented Sep 17, 2015

This appears to be a data explorer bug, so kicking over to @deontologician .

@coffeemug
Copy link
Contributor

@mlucy -- perhaps I'm misunderstanding the issue, but how could a segfault + valgrind memory errors be a data explorer bug?

@danielmewes
Copy link
Member Author

There are actually two bugs here:

  1. The seg fault, which @mlucy just fixed
  2. The fact that the changefeeds don't work in the Data Explorer, even if the server doesn't crash.

Let's keep this one about the seg fault, and use #4852 to track the Data-Explorer-specific issue.

@danielmewes danielmewes assigned mlucy and unassigned deontologician Sep 17, 2015
@mlucy
Copy link
Member

mlucy commented Sep 17, 2015

The segfault is in next and 2.1.x, OTS by @danielmewes (commits a734dcc and 6167e89).

@mlucy mlucy closed this as completed Sep 17, 2015
@danielmewes danielmewes modified the milestones: 2.1.x, 2.1.5 Oct 1, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants