[complement-svn] SF.net SVN: complement: [1313] trunk/explore
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2006-10-11 11:51:20
|
Revision: 1313 http://svn.sourceforge.net/complement/?rev=1313&view=rev Author: complement Date: 2006-10-11 04:51:09 -0700 (Wed, 11 Oct 2006) Log Message: ----------- fix inconsistency with observer_run flag; test finish fine now Modified Paths: -------------- trunk/explore/include/sockios/sockmgr.cc trunk/explore/lib/sockios/ChangeLog trunk/explore/test/libstem/unit/Echo.cc trunk/explore/test/libstem/unit/unit_test.cc Modified: trunk/explore/include/sockios/sockmgr.cc =================================================================== --- trunk/explore/include/sockios/sockmgr.cc 2006-10-11 07:11:05 UTC (rev 1312) +++ trunk/explore/include/sockios/sockmgr.cc 2006-10-11 11:51:09 UTC (rev 1313) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/10/10 21:47:30 ptr> +// -*- C++ -*- Time-stamp: <06/10/11 15:30:02 ptr> /* * Copyright (c) 1997-1999, 2002, 2003, 2005, 2006 @@ -346,9 +346,12 @@ } me->_orlock.lock(); if ( !me->_observer_run ) { + me->_observer_run = true; + me->_orlock.unlock(); me->mgr.launch( observer, me, 0, 0, PTHREAD_STACK_MIN * 2 ); + } else { + me->_orlock.unlock(); } - me->_orlock.unlock(); } } catch ( ... ) { @@ -489,10 +492,6 @@ timespec now; std::fill( pool_size, pool_size + 3, 0 ); - me->_orlock.lock(); - me->_observer_run = true; - me->_orlock.unlock(); - try { do { // std::swap( pool_size[0], pool_size[1] ); Modified: trunk/explore/lib/sockios/ChangeLog =================================================================== --- trunk/explore/lib/sockios/ChangeLog 2006-10-11 07:11:05 UTC (rev 1312) +++ trunk/explore/lib/sockios/ChangeLog 2006-10-11 11:51:09 UTC (rev 1313) @@ -1,3 +1,8 @@ +2006-10-11 Petr Ovtchenkov <pt...@is...> + + * sockmgr.cc: fix inconsistency with observer_run + flag. + 2006-10-10 Petr Ovtchenkov <pt...@is...> * sockmgr.cc: user can read from socket immediate Modified: trunk/explore/test/libstem/unit/Echo.cc =================================================================== --- trunk/explore/test/libstem/unit/Echo.cc 2006-10-11 07:11:05 UTC (rev 1312) +++ trunk/explore/test/libstem/unit/Echo.cc 2006-10-11 11:51:09 UTC (rev 1313) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/10/11 01:25:24 ptr> +// -*- C++ -*- Time-stamp: <06/10/11 14:54:52 ptr> /* * Copyright (c) 2006 Modified: trunk/explore/test/libstem/unit/unit_test.cc =================================================================== --- trunk/explore/test/libstem/unit/unit_test.cc 2006-10-11 07:11:05 UTC (rev 1312) +++ trunk/explore/test/libstem/unit/unit_test.cc 2006-10-11 11:51:09 UTC (rev 1313) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/10/11 01:24:22 ptr> +// -*- C++ -*- Time-stamp: <06/10/11 15:36:32 ptr> /* * Copyright (c) 2002, 2003, 2006 @@ -27,6 +27,7 @@ #include "Echo.h" #include <stem/NetTransport.h> +#include <stem/EvManager.h> #include <sockios/sockmgr.h> using namespace std; @@ -346,37 +347,63 @@ void stem_test::peer() { - sockmgr_stream_MP<stem::NetTransport> srv( 6995 ); + /* + * Scheme: + * / NetTransport / c1 + * Local Event Manager - NetTransportMgr - c2 + * \ echo + * Due to all objects in the same process space, + * c1 and c2 use the same Local Event Manager + * but I try to bypass this fact. + * I.e. I try to simulate + * + * / NetTransport ~~ NetTransportMgr - LEM - c1 + * Local Event Manager \ + * \ echo ~~ NetTransportMgr - LEM - c2 + * + * and provide simulation of logical connection + * + * / c1 + * echo + * \ c2 + * + * (c1 <-> c2, through 'echo') + */ + + sockmgr_stream_MP<stem::NetTransport> srv( 6995 ); // server, it serve 'echo' + stem::NetTransportMgr mgr; - StEMecho echo( 0, "echo service"); // <= zero! - + StEMecho echo( 0, "echo service"); // <= zero! 'echo' server, default ('zero' address) + echo.cnd.set( false ); - stem::addr_type zero = mgr.open( "localhost", 6995 ); + stem::addr_type zero = mgr.open( "localhost", 6995 ); // take address of 'zero' (aka default) object via net transport from server + // It done like it should on client side BOOST_CHECK( zero != stem::badaddr ); BOOST_CHECK( zero != 0 ); + BOOST_CHECK( zero & stem::extbit ); // "external" address - PeerClient c1( "c1 local" ); + PeerClient c1( "c1 local" ); // c1 client stem::Event ev( NODE_EV_REGME ); ev.dest( zero ); ev.value() = "c1"; - c1.Send( ev ); + c1.Send( ev ); // 'register' c1 client on 'echo' server echo.cnd.try_wait(); echo.cnd.set( false ); - PeerClient c2( "c2 local" ); + PeerClient c2( "c2 local" ); // c2 client ev.value() = "c2"; - c2.Send( ev ); + c2.Send( ev ); // 'register' c2 client on 'echo' server echo.cnd.try_wait(); - Naming nm; + Naming nm; // use it to take names from NS // stem::Event ev_nm( EV_STEM_RQ_ADDR_LIST1 ); stem::Event ev_nm( EV_STEM_RQ_EXT_ADDR_LIST1 ); @@ -386,26 +413,38 @@ nm.wait(); stem::addr_type peer_addr = stem::badaddr; + + // This is to make chance for mapping address later: + stem::NetTransport_base *tr = c1.manager()->transport( mgr.ns() ); + + BOOST_CHECK( tr != 0 ); // processed via network transport, indeed + for ( Naming::nsrecords_type::const_iterator i = nm.lst1.begin(); i != nm.lst1.end(); ++i ) { + BOOST_CHECK( i->first & stem::extbit ); // "external" if ( i->second.find( "c2@" ) == 0 ) { - peer_addr = i->first; + // make pair: address on side of c1 -> address on side of 'echo' + // note: on side of 'echo' server there are mapping too, + // address on side of 'echo' -> address on side of c2 + peer_addr = tr->make_map( i->first, "c2@foreign" ); } // cerr << hex << i->first << dec << " => " << i->second << endl; + // cerr << hex << tr->make_map( i->first, "map" ) << dec << endl; } + BOOST_CHECK( peer_addr != stem::badaddr ); // address found + BOOST_CHECK( peer_addr & stem::extbit ); // address external stem::Event echo_ev( NODE_EV_ECHO ); - echo_ev.dest( 0x8000000b ); + echo_ev.dest( /* 0x8000000b */ peer_addr ); echo_ev.value() = "c2 local"; c1.Send( echo_ev ); c2.wait(); - cerr << "qq\n"; + mgr.close(); + srv.close(); - srv.close(); - cerr << "xx\n"; srv.wait(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |