Re: [Boost-users] [multi_index] Core dump in multi-index library !!
Hi Joaquin, Sometime also I get following message when I run. I have pure virtual method in Procedure.h file but I have overridden in my Sample_Procedure.h file and implemented there. But still I am getting error relating pure virtual method call. Thanks Priyank // PROCEDURE HEADER #ifndef PROCEDURE_H #define PROCEDURE_H #include <boost/utility.hpp> #include <boost/shared_ptr.hpp> #include <ace/Message_Block.h> #include <ace/Task.h> #include "Procedure_State_Enum.h" #include "Procedure_Type_Enum.h" #include "Loader_Trace.h" class Procedure : boost::noncopyable { public: /** * Virtual destructor. */ virtual Procedure::~Procedure() { } /** * Stats this procedure. * @return Success of failure status of start */ virtual int start() = 0; /** * Handles this message block. Here we can not use scoped pointer since * we have to use release() method that does more than just deleting the * memory allocated. * @param _msg_block Message block to handler by procedure. * @return Indicates success or failure */ virtual int handle(boost::shared_ptr<ACE_Message_Block> _msg_block) = 0; /** * Returns state of the procedure. * @return Success or failure of the procedure. */ virtual const Procedure_State_Enum& state() const = 0; /** * Sets state of the procedure. * @param state to set */ virtual void state(const Procedure_State_Enum& _state) = 0; /** * Id for registration with connection. * @return Id that is used for registration in subscriber. */ virtual int id() const = 0; /** * Returns type of the procedure. * @return type of the procedure. */ virtual const Procedure_Type_Enum& procedure_type() const = 0; /** * This method will be called whenever procedure timed out for incoming * message. Each procedure will register to appropriate reactor (global for now) using * Procedure Timer Handler class and that class will forward the time out method back * to procedure once time out happens. * @param Indicates where timed out handled successfully or not */ virtual void handle_timeout() = 0; }; #endif // SAMPLE PROCEDURE HEADER #ifndef SAMPLE_PROCEDURE_H #define SAMPLE_PROCEDURE_H #include <boost/utility.hpp> #include <boost/scoped_ptr.hpp> #include <ace/Auto_Event.h> #include <ace/Message_Block.h> #include "../../../../core/include/Procedure.h" #include "../../../../core/include/Connection.h" #include "../../../../core/include/Procedure_Timer_Handler.h" #include "../../../../core/include/Logger.h" #include "../../../apps/include/Access_Point.h" class Sample_Procedure : public Procedure { public: /** * Constructor. * @param _ap Access point associated with this procedure. * @param _wait_timer Wait period for receiving message * may not require for real procedure */ Sample_Procedure (Access_Point * _ap, int _recv_timer); /** * Start method will be called when this procedure is activated. */ virtual int start(); /** * Returns state this procedure. * @return Success or failure of the procedure. */ virtual const Procedure_State_Enum& state () const { return state_; } /** * Sets state of the procedure. * @param state to set */ virtual void state(const Procedure_State_Enum& _state) { state_ = _state; } /** * Returns id for this procedure. This has to be unique id * for the procedure. */ virtual int id () const { return id_; } /** * Returns type of the procedure. * @return type of the procedure. */ virtual const Procedure_Type_Enum& procedure_type() const { return type_; } /** * This method will be called whenever procedure timed out for incoming * message. Each procedure will register to appropriate reactor (global for now) using * Procedure Timer Handler class and that class will forward the time out method back * to procedure once time out happens. */ virtual void handle_timeout(); /** * Handles this message block. Here we can not use scoped pointer since * we have to use release() method that does more than just deleting the * memory allocated. * @param _msg_block Message block to handler by procedure. * @return Indicates success or failure */ virtual int handle(boost::shared_ptr<ACE_Message_Block> _msg_block); static int ID; private: /** * Access point for which the procedure is related to. * This is just a temporary storage. User has to pass * each time procedure is created. */ Access_Point* ap_; /** * State of this procedure. */ Procedure_State_Enum state_; /** * State of the procedure. */ Procedure_Type_Enum type_; /** * Wait period to wait. */ int recv_timer_; /** * Procedure timer handler. */ boost::scoped_ptr<Procedure_Timer_Handler> recv_timer_handler_; /** * Created static for this samle procedure. Might be regular * data member for real procedure. */ int id_; }; #endif Thanks, Priyank LD_TRACE: (8) In Method: Procedure_Pool::find_by_id File: `src/core/procedure/Procedure_Pool.cpp' Line: 54 PROCEDURE TO FIND: 1548 pure virtual method called Abort (core dumped) (gdb) where #0 0xfe8d9764 in __sigprocmask () from /usr/lib/libthread.so.1 #1 0xfe8ce978 in _resetsig () from /usr/lib/libthread.so.1 #2 0xfe8ce118 in _sigon () from /usr/lib/libthread.so.1 #3 0xfe8d1158 in _thrp_kill () from /usr/lib/libthread.so.1 #4 0xfea4b9dc in raise () from /usr/lib/libc.so.1 #5 0xfea358fc in abort () from /usr/lib/libc.so.1 #6 0xfeb61208 in __cxxabiv1::__terminate (handler=0xfea357f4 <abort>) at ../../../../gcc-3.3/libstdc++-v3/libsupc++/eh_terminate.cc:47 #7 0xfeb61244 in std::terminate () at ../../../../gcc-3.3/libstdc++-v3/libsupc++/eh_terminate.cc:57 #8 0xfeb61744 in __cxa_pure_virtual () at ../../../../gcc-3.3/libstdc++-v3/libsupc++/pure.cc:50 #9 0x000ce1d8 in _ZNK5boost11multi_index13const_mem_funI9ProcedureiXadsrS2_NKS2_2idEvEEcl ERKS2_ () #10 0x000ce174 in _ZNK5boost11multi_index13const_mem_funI9ProcedureiXadsrS2_NKS2_2idEvEEcl IPS2_EEiRKT_ () #11 0x000ce3e4 in _ZN5boost11multi_index6detail18ordered_index_findINS1_18ordered_index_no deINS1_15index_node_baseIP9ProcedureEEEENS0_13const_mem_funIS5_iXadsrS5_ NKS5_2idEvEEEiSt4lessIiEEEPT_SE_RKT0_RKT1_RKT2_ () #12 0x000cd72c in _ZNK5boost11multi_index6detail13ordered_indexINS0_13const_mem_funI9Proce dureiXadsrS4_NKS4_2idEvEEESt4lessIiENS1_9nth_layerILi1EPS4_NS0_10indexed _byINS0_14ordered_uniqueINS0_3tagI16procedure_id_tagN4mpl_2naESF_SF_SF_S F_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_EES5_SF_EESF_SF_SF_SF_SF_SF_ SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_EESaIS9_EEENS_3mpl6v_itemISD_NSL_ 7vector0ISF_EELi0EEENS1_18ordered_unique_tagEE4findIiEENS1_14index_itera torINS1_18ordered_index_nodeINS1_15index_node_baseIS9_EEEEEERKT_ () #13 0x00064d78 in Procedure_Pool::find_by_id () #14 0x00064650 in Procedure_Pool::add_by_id () #15 0x000783d4 in AP_TCP_Connection::subscribe () #16 0x00069d64 in Access_Point::subscribe () #17 0x00076450 in Procedure_Executor::handle_timeout () #18 0xff2c1940 in ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Recursive_Thread_Mutex>::tim eout () from /vob/wibb_test/tools/cots/ACE_5.5/ace/libACE.so.5.5.0 #19 0xff26f2e4 in ACE_TP_Reactor::handle_timer_events () at /mot/proj/ivtools/ppatel1/ACE_wrappers/ace/String_Base.inl:32 #20 0xff26f160 in ACE_TP_Reactor::dispatch_i () at /mot/proj/ivtools/ppatel1/ACE_wrappers/ace/String_Base.inl:32 ---Type <return> to continue, or q <return> to quit---q Quit (gdb) quit // METHOD bool Procedure_Pool::find_by_id(Procedure * _procedure) { LD_TRACE("Procedure_Pool::find_by_id"); ACE_ASSERT(_procedure != 0); ACE_DEBUG((LM_DEBUG, "PROCEDURE TO FIND: %d\n", _procedure->id())); Procedure_By_Id::iterator it = procedure_by_id_.find(_procedure->id()); ACE_DEBUG((LM_DEBUG, "AFTER FIND CALL\n")); return (it != procedure_by_id_.end()); }
participants (1)
-
Patel Priyank-PPATEL1