[complement-svn] SF.net SVN: complement: [1679] trunk/complement/explore/test/virtual_time
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2007-08-13 15:52:07
|
Revision: 1679 http://complement.svn.sourceforge.net/complement/?rev=1679&view=rev Author: complement Date: 2007-08-13 08:52:01 -0700 (Mon, 13 Aug 2007) Log Message: ----------- more real group number pass Modified Paths: -------------- trunk/complement/explore/test/virtual_time/test/vt_handler.cc trunk/complement/explore/test/virtual_time/vtime.cc trunk/complement/explore/test/virtual_time/vtime.h Modified: trunk/complement/explore/test/virtual_time/test/vt_handler.cc =================================================================== --- trunk/complement/explore/test/virtual_time/test/vt_handler.cc 2007-08-13 07:02:36 UTC (rev 1678) +++ trunk/complement/explore/test/virtual_time/test/vt_handler.cc 2007-08-13 15:52:01 UTC (rev 1679) @@ -55,6 +55,8 @@ { cnd.set( false ); gr.set( false ); + + JoinGroup( 0 ); } VTDummy::VTDummy( stem::addr_type id ) : @@ -64,6 +66,8 @@ { cnd.set( false ); gr.set( false ); + + JoinGroup( 0 ); } VTDummy::VTDummy( stem::addr_type id, const char *info ) : @@ -73,6 +77,8 @@ { cnd.set( false ); gr.set( false ); + + JoinGroup( 0 ); } VTDummy::~VTDummy() Modified: trunk/complement/explore/test/virtual_time/vtime.cc =================================================================== --- trunk/complement/explore/test/virtual_time/vtime.cc 2007-08-13 07:02:36 UTC (rev 1678) +++ trunk/complement/explore/test/virtual_time/vtime.cc 2007-08-13 15:52:01 UTC (rev 1679) @@ -847,6 +847,52 @@ } } +void VTDispatcher::Unsubscribe( oid_type oid ) +{ + // See comment on top of VTSend above + xmt::recursive_scoped_lock lk( this->_theHistory_lock ); + + vt_map_type::iterator i = vtmap.find( oid ); + if ( i != vtmap.end() ) { + list<group_type> grp_list; + i->second.groups_list( back_inserter( grp_list ) ); + for ( list<group_type>::const_iterator grp = grp_list.begin(); grp != grp_list.end(); ++grp ) { + + pair<gid_map_type::iterator,gid_map_type::iterator> range = + grmap.equal_range( *grp ); + + while ( range.first != range.second ) { + if ( range.first->second == oid ) { + grmap.erase( range.first++ ); + } else { + vt_map_type::iterator j = vtmap.find( range.first->second ); + if ( j != vtmap.end() ) { + stem::Event_base<VSsync_rq> ev( VS_OUT_MEMBER ); + ev.dest( j->second.stem_addr() ); + ev.src( i != vtmap.end() ? i->second.stem_addr() : self_id() ); + ev.value().grp = *grp; +#ifdef __FIT_VS_TRACE + try { + scoped_lock lk(_lock_tr); + if ( _trs != 0 && _trs->good() && (_trflags & tracegroup) ) { + *_trs << "VS_OUT_MEMBER " << ev.src() << " -> " << ev.dest() << endl; + } + } + catch ( ... ) { + } +#endif // __FIT_VS_TRACE + + Forward( ev ); + } + ++range.first; + } + } + i->second.rm_group( *grp ); + } + vtmap.erase( i ); + } +} + void VTDispatcher::get_gvtime( group_type grp, stem::addr_type addr, gvtime_type& gvt ) { // See comment on top of VTSend above @@ -979,7 +1025,7 @@ { new( Init_buf ) Init(); - _vtdsp->Subscribe( self_id(), oid_type( self_id() ), /* grp */ 0 ); + // _vtdsp->Subscribe( self_id(), oid_type( self_id() ), /* grp */ 0 ); } VTHandler::VTHandler( const char *info ) : @@ -987,7 +1033,7 @@ { new( Init_buf ) Init(); - _vtdsp->Subscribe( self_id(), oid_type( self_id() ), /* grp */ 0 ); + // _vtdsp->Subscribe( self_id(), oid_type( self_id() ), /* grp */ 0 ); } VTHandler::VTHandler( stem::addr_type id, const char *info ) : @@ -995,12 +1041,12 @@ { new( Init_buf ) Init(); - _vtdsp->Subscribe( id, oid_type( id ), /* grp */ 0 ); + // _vtdsp->Subscribe( id, oid_type( id ), /* grp */ 0 ); } VTHandler::~VTHandler() { - _vtdsp->Unsubscribe( oid_type( self_id() ), /* grp */ 0 ); + _vtdsp->Unsubscribe( oid_type( self_id() ) ); ((Init *)Init_buf)->~Init(); } Modified: trunk/complement/explore/test/virtual_time/vtime.h =================================================================== --- trunk/complement/explore/test/virtual_time/vtime.h 2007-08-13 07:02:36 UTC (rev 1678) +++ trunk/complement/explore/test/virtual_time/vtime.h 2007-08-13 15:52:01 UTC (rev 1679) @@ -220,6 +220,10 @@ bool rm_group( group_type ); void rm_member( const oid_type& ); + template <typename BackInsertIterator> + void groups_list( BackInsertIterator bi ) const + { std::copy( groups.begin(), groups.end(), bi ); } + stem::addr_type stem_addr() const { return addr; } @@ -307,6 +311,7 @@ void VTSend( const stem::Event& e, group_type ); void Subscribe( stem::addr_type, oid_type, group_type ); void Unsubscribe( oid_type, group_type ); + void Unsubscribe( oid_type ); void get_gvtime( group_type, stem::addr_type, gvtime_type& ); void set_gvtime( group_type, stem::addr_type, const gvtime_type& ); @@ -357,6 +362,8 @@ virtual ~VTHandler(); void VTSend( const stem::Event& e ); + void JoinGroup( group_type grp ) + { _vtdsp->Subscribe( self_id(), oid_type( self_id() ), grp ); } virtual void VSNewMember( const stem::Event_base<VSsync_rq>& e ); virtual void VSOutMember( const stem::Event_base<VSsync_rq>& e ); virtual void VSsync_time( const stem::Event_base<VSsync>& ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |