Skip to content

容器的clear方法会导致所存对象被析构

Lewis Chan edited this page Mar 31, 2017 · 1 revision

这里我某次在FDWrapper的close加backstrace的结果,似乎比作者的backstrace要打印得详细点,也许是debug的缘故吧

[TRACE] proxy.cpp:262 {void cerb::Proxy::_move_closed_slot_updaters()} - _slot_updaters cleared
[DEBUG] proxy.cpp:326 {void cerb::Proxy::handle_events(poll::pevent*, int)} - poll events over
[TRACE] proxy.cpp:282 {void poll_ctl(cerb::Proxy*, std::map<cerb::Connection*, bool>)} - conn_polls size 0
[TRACE] proxy.cpp:329 {void cerb::Proxy::handle_events(poll::pevent*, int)} - active_conns size=1, do after_events
[TRACE] proxy.cpp:331 {void cerb::Proxy::handle_events(poll::pevent*, int)} - after_events SlotsMapUpdater(-1@0x2ae2240042a0)[10.153.108.165:17104]
backtrace() returned 22 addresses
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZN4cerb9FDWrapper5closeEv+0x43) [0x524e55]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZN4cerb9FDWrapperD2Ev+0x18) [0x524dfa]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZN4cerb10ConnectionD1Ev+0x27) [0x4f1b4b]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZN4cerb15SlotsMapUpdaterD2Ev+0x75) [0x53518d]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZN4cerb15SlotsMapUpdaterD0Ev+0x18) [0x5351bc]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZNKSt14default_deleteIN4cerb15SlotsMapUpdaterEEclEPS1_+0x2e) [0x5351f8]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZNSt10unique_ptrIN4cerb15SlotsMapUpdaterESt14default_deleteIS1_EED2Ev+0x47) [0x533cb5]
[std::unique_ptr<cerb::SlotsMapUpdater, std::default_delete<cerb::SlotsMapUpdater> >::~unique_ptr()]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZN4util4sptrIN4cerb15SlotsMapUpdaterEED1Ev+0x18) [0x532e3c]
[util::sptr<cerb::SlotsMapUpdater>::~sptr()]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZSt8_DestroyIN4util4sptrIN4cerb15SlotsMapUpdaterEEEEvPT_+0x18) [0x538774]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZNSt12_Destroy_auxILb0EE9__destroyIPN4util4sptrIN4cerb15SlotsMapUpdaterEEEEEvT_S8_+0x26) [0x537bb9]
[void std::_Destroy_aux<false>::__destroy<util::sptr<cerb::SlotsMapUpdater>*>(util::sptr<cerb::SlotsMapUpdater>*, util::sptr<cerb::SlotsMapUpdater>*)]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZSt8_DestroyIPN4util4sptrIN4cerb15SlotsMapUpdaterEEEEvT_S6_+0x23) [0x5363ab]
[void std::_Destroy<util::sptr<cerb::SlotsMapUpdater>*>(util::sptr<cerb::SlotsMapUpdater>*, util::sptr<cerb::SlotsMapUpdater>*)]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZSt8_DestroyIPN4util4sptrIN4cerb15SlotsMapUpdaterEEES4_EvT_S6_RSaIT0_E+0x27) [0x534aed]
[void std::_Destroy<util::sptr<cerb::SlotsMapUpdater>*, util::sptr<cerb::SlotsMapUpdater> >(util::sptr<cerb::SlotsMapUpdater>*, util::sptr<cerb::SlotsMapUpdater>*, std::allocator<util::sptr<cerb::SlotsMapUpdater> >&)]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZNSt6vectorIN4util4sptrIN4cerb15SlotsMapUpdaterEEESaIS4_EE15_M_erase_at_endEPS4_+0x36) [0x5352c0]
[std::vector<util::sptr<cerb::SlotsMapUpdater>, std::allocator<util::sptr<cerb::SlotsMapUpdater> > >::_M_erase_at_end(util::sptr<cerb::SlotsMapUpdater>*)]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZNSt6vectorIN4util4sptrIN4cerb15SlotsMapUpdaterEEESaIS4_EE5clearEv+0x22) [0x533d8e][std::vector<util::sptr<cerb::SlotsMapUpdater>, std::allocator<util::sptr<cerb::SlotsMapUpdater> > >::clear()]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus(_ZN4cerb5Proxy13handle_eventsEP11epoll_eventi+0x768) [0x530c3a]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus() [0x522a65]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus() [0x523f4c]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus() [0x523e91]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - ./cerberus() [0x523e0e]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - /usr/lib64/libstdc++.so.6() [0x3a4a4bb760]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - /lib64/libpthread.so.0() [0x3a47807aa1]
[DEBUG] fdutil.cpp:38 {void cerb::FDWrapper::close()} - /lib64/libc.so.6(clone+0x6d) [0x3a474e893d]
[INFO ] fdutil.cpp:41 {void cerb::FDWrapper::close()} - CLOSE fd=10
backtrace() returned 22 addresses