[complement-svn] SF.net SVN: complement: [1448] trunk/complement/explore
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2006-12-13 18:32:47
|
Revision: 1448 http://svn.sourceforge.net/complement/?rev=1448&view=rev Author: complement Date: 2006-12-13 10:32:33 -0800 (Wed, 13 Dec 2006) Log Message: ----------- NetTransportMgr should have own sockstream and avoid problems with order of destruction of net member. Modified Paths: -------------- trunk/complement/explore/include/stem/NetTransport.h trunk/complement/explore/lib/stem/ChangeLog trunk/complement/explore/lib/stem/NetTransport.cc Modified: trunk/complement/explore/include/stem/NetTransport.h =================================================================== --- trunk/complement/explore/include/stem/NetTransport.h 2006-12-13 18:29:16 UTC (rev 1447) +++ trunk/complement/explore/include/stem/NetTransport.h 2006-12-13 18:32:33 UTC (rev 1448) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/11/27 17:22:33 ptr> +// -*- C++ -*- Time-stamp: <06/12/13 13:22:52 ptr> /* * Copyright (c) 1997-1999, 2002, 2003, 2005, 2006 @@ -86,7 +86,7 @@ public: NetTransportMgr() : NetTransport_base( "stem::NetTransportMgr" ) - { } + { net = &_channel; } __FIT_DECLSPEC ~NetTransportMgr(); @@ -102,6 +102,7 @@ protected: static xmt::Thread::ret_code _loop( void * ); xmt::Thread _thr; + std::sockstream _channel; }; class NetTransportMP : Modified: trunk/complement/explore/lib/stem/ChangeLog =================================================================== --- trunk/complement/explore/lib/stem/ChangeLog 2006-12-13 18:29:16 UTC (rev 1447) +++ trunk/complement/explore/lib/stem/ChangeLog 2006-12-13 18:32:33 UTC (rev 1448) @@ -1,3 +1,9 @@ +2006-12-13 Petr Ovtchenkov <pt...@is...> + + * NetTransport.h, NetTransport.cc: NetTransportMgr + should have own sockstream and avoid problems with + order of destruction of net member. + 2006-12-04 Petr Ovtchenkov <pt...@is...> * EvManager.h, EvManager.cc, Names.cc: remove global Modified: trunk/complement/explore/lib/stem/NetTransport.cc =================================================================== --- trunk/complement/explore/lib/stem/NetTransport.cc 2006-12-13 18:29:16 UTC (rev 1447) +++ trunk/complement/explore/lib/stem/NetTransport.cc 2006-12-13 18:32:33 UTC (rev 1448) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/11/30 22:46:53 ptr> +// -*- C++ -*- Time-stamp: <06/12/13 13:38:28 ptr> /* * @@ -99,7 +99,6 @@ if ( net != 0 ) { manager()->Remove( this ); net->close(); - net = 0; } } @@ -282,15 +281,7 @@ __FIT_DECLSPEC NetTransportMgr::~NetTransportMgr() { - if ( net ) { - net->rdbuf()->shutdown( sock_base::stop_in | sock_base::stop_out ); - net->close(); // otherwise _loop may not exited - // this->close(); - join(); - // NetTransport_base::close() called during loop thread termination (see _loop) - delete net; - net = 0; - } + NetTransportMgr::close(); } __FIT_DECLSPEC @@ -301,18 +292,13 @@ // I should be sure, that not more then one _loop running from here! // For this, I enforce close connection before I try open new, // and wait thread with _loop before start new. - if ( net == 0 ) { - net = new sockstream( hostname, port, stype ); - } else if ( net->is_open() ) { - // net->close(); + if ( _channel.is_open() ) { close(); // I should wait termination of _loop, clear EDS address mapping, etc. - net->open( hostname, port, stype ); - } else { - join(); // This is safe: transparent if no _loop, and wait it if one exist - net->open( hostname, port, stype ); } + join(); // This is safe: transparent if no _loop, and wait it if one exist + _channel.open( hostname, port, stype ); - if ( net->good() ) { + if ( _channel.good() ) { Event ev( EV_STEM_TRANSPORT ); gaddr_type dst; gaddr_type src; @@ -357,15 +343,10 @@ __FIT_DECLSPEC void NetTransportMgr::close() { - if ( net ) { - net->rdbuf()->shutdown( sock_base::stop_in | sock_base::stop_out ); - net->close(); // otherwise _loop may not exited - // this->close(); - join(); - // NetTransport_base::close() called during loop thread termination (see _loop) - delete net; - net = 0; - } + _channel.rdbuf()->shutdown( sock_base::stop_in | sock_base::stop_out ); + NetTransport_base::close(); + // _channel.close(); + join(); } xmt::Thread::ret_code NetTransportMgr::_loop( void *p ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |