[complement-svn] SF.net SVN: complement: [1935] trunk/complement/explore
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2008-07-01 14:41:39
|
Revision: 1935 http://complement.svn.sourceforge.net/complement/?rev=1935&view=rev Author: complement Date: 2008-07-01 07:41:36 -0700 (Tue, 01 Jul 2008) Log Message: ----------- Replace old xmt-style mutexes/conds by new wg21 implementation. Modified Paths: -------------- trunk/complement/explore/include/stem/Event.h trunk/complement/explore/include/stem/NetTransport.h trunk/complement/explore/lib/stem/EvManager.cc trunk/complement/explore/lib/stem/Names.cc trunk/complement/explore/lib/stem/NetTransport.cc trunk/complement/explore/lib/stem/_EventHandler.cc trunk/complement/explore/lib/stem/ut/Convert.cc trunk/complement/explore/lib/stem/ut/Convert.h trunk/complement/explore/lib/stem/ut/Echo.cc trunk/complement/explore/lib/stem/ut/Echo.h trunk/complement/explore/lib/stem/ut/Makefile trunk/complement/explore/lib/stem/ut/NameService.cc trunk/complement/explore/lib/stem/ut/NameService.h trunk/complement/explore/lib/stem/ut/Node.cc trunk/complement/explore/lib/stem/ut/Node.h trunk/complement/explore/lib/stem/ut/NodeDL.h trunk/complement/explore/lib/stem/ut/dl/loadable_stem.cc trunk/complement/explore/lib/stem/ut/unit_test.cc Modified: trunk/complement/explore/include/stem/Event.h =================================================================== --- trunk/complement/explore/include/stem/Event.h 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/include/stem/Event.h 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,8 +1,8 @@ -// -*- C++ -*- Time-stamp: <07/10/15 22:41:17 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:14:16 yeti> /* * - * Copyright (c) 1995-1999, 2002, 2003, 2005-2007 + * Copyright (c) 1995-1999, 2002, 2003, 2005-2008 * Petr Ovtchenkov * * Copyright (c) 1999-2001 @@ -29,7 +29,7 @@ #include <misc/type_traits.h> #include <stem/EvPack.h> #include <mt/uid.h> -#include <mt/xmt.h> +#include <mt/thread> #ifdef STLPORT # include <unordered_map> @@ -85,7 +85,7 @@ explicit gaddr_type( stem::addr_type _addr ) : hid( xmt::hostid() ), - pid( xmt::getpid() ), + pid( std::tr2::getpid() ), addr( _addr ) { } Modified: trunk/complement/explore/include/stem/NetTransport.h =================================================================== --- trunk/complement/explore/include/stem/NetTransport.h 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/include/stem/NetTransport.h 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <08/06/27 12:34:34 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 15:29:44 yeti> /* * Copyright (c) 1997-1999, 2002, 2003, 2005, 2006, 2008 @@ -81,6 +81,10 @@ __FIT_DECLSPEC void connect( std::sockstream& ); + + private: + void _do_handshake(); + bool _handshake; }; class NetTransportMgr : Modified: trunk/complement/explore/lib/stem/EvManager.cc =================================================================== --- trunk/complement/explore/lib/stem/EvManager.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/EvManager.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <08/06/27 12:36:14 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:18:21 yeti> /* * @@ -20,7 +20,7 @@ #include "stem/EvManager.h" #include "stem/NetTransport.h" #include <iomanip> -#include <mt/xmt.h> +#include <mt/mutex> // #include <typeinfo> @@ -114,7 +114,7 @@ lock_guard<mutex> lk( _lock_xheap ); gaddr_type& gaddr = _ex_heap[id]; gaddr.hid = xmt::hostid(); - gaddr.pid = xmt::getpid(); + gaddr.pid = std::tr2::getpid(); gaddr.addr = id; } @@ -147,7 +147,7 @@ lock_guard<mutex> lk( _lock_xheap ); gaddr_type& gaddr = _ex_heap[id]; gaddr.hid = xmt::hostid(); - gaddr.pid = xmt::getpid(); + gaddr.pid = std::tr2::getpid(); gaddr.addr = id; } @@ -198,7 +198,7 @@ const std::string& info ) { addr_type id; - if ( addr.hid == xmt::hostid() && addr.pid == xmt::getpid() ) { // local + if ( addr.hid == xmt::hostid() && addr.pid == std::tr2::getpid() ) { // local if ( addr.addr & extbit ) { // may be transit object lock_guard<mutex> lk( _lock_xheap ); pair<uuid_tr_heap_type::const_iterator,uuid_tr_heap_type::const_iterator> range = _tr_heap.equal_range( addr ); @@ -286,7 +286,7 @@ __FIT_DECLSPEC addr_type EvManager::reflect( const gaddr_type& addr ) const { - if ( addr.hid == xmt::hostid() && addr.pid == xmt::getpid() ) { + if ( addr.hid == xmt::hostid() && addr.pid == std::tr2::getpid() ) { // this host, this process if ( (addr.addr & extbit) == 0 ) { // looks like local object lock_guard<mutex> _x1( _lock_heap ); @@ -432,7 +432,7 @@ if ( i == _ex_heap.end() ) { // destination not found ostringstream s; s << "external address unknown: " << hex << e.dest() << " from " - << e.src() << ", pid " << xmt::getpid() << dec; + << e.src() << ", pid " << std::tr2::getpid() << dec; throw invalid_argument( s.str() ); } @@ -450,7 +450,7 @@ if ( j == _ex_heap.end() ) { gaddr_type& _gaddr_src = _ex_heap[e.src()]; _gaddr_src.hid = xmt::hostid(); - _gaddr_src.pid = xmt::getpid(); + _gaddr_src.pid = std::tr2::getpid(); _gaddr_src.addr = e.src(); // it may be as local as foreign; if e.src() // is foreign, the object is 'transit object' gaddr_src = _gaddr_src; Modified: trunk/complement/explore/lib/stem/Names.cc =================================================================== --- trunk/complement/explore/lib/stem/Names.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/Names.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,7 +1,7 @@ -// -*- C++ -*- Time-stamp: <06/12/04 18:43:56 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:11:16 yeti> /* - * Copyright (c) 1997-1999, 2002, 2003, 2005, 2006 + * Copyright (c) 1997-1999, 2002, 2003, 2005, 2006, 2008 * Petr Ovtchenkov * * Copyright (c) 1999-2001 @@ -26,12 +26,9 @@ #include <list> #include <iostream> -#include <mt/xmt.h> - namespace stem { using namespace std; -using namespace xmt; __FIT_DECLSPEC Names::Names() : EventHandler() Modified: trunk/complement/explore/lib/stem/NetTransport.cc =================================================================== --- trunk/complement/explore/lib/stem/NetTransport.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/NetTransport.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <08/06/27 01:28:00 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:07:37 yeti> /* * @@ -264,10 +264,15 @@ __FIT_DECLSPEC NetTransport::NetTransport( std::sockstream& s ) : - NetTransport_base( "stem::NetTransport" ) + NetTransport_base( "stem::NetTransport" ), + _handshake( false ) { net = &s; +} +__FIT_DECLSPEC +void NetTransport::_do_handshake() +{ try { Event ev; gaddr_type dst; @@ -295,40 +300,46 @@ } else { throw runtime_error( "net error or net handshake error" ); } + _handshake = true; } catch ( runtime_error& err ) { try { lock_guard<mutex> lk(manager()->_lock_tr); if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & EvManager::tracefault) ) { *manager()->_trs << __FILE__ << ":" << __LINE__ << " " << err.what() - << " (" << s.rdbuf()->inet_addr() << ":" << s.rdbuf()->port() + << " (" << net->rdbuf()->inet_addr() << ":" << net->rdbuf()->port() << ")" << endl; } } catch ( ... ) { } - s.close(); + net->close(); } catch ( ... ) { try { lock_guard<mutex> lk(manager()->_lock_tr); if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & EvManager::tracefault) ) { *manager()->_trs << __FILE__ << ":" << __LINE__ << " unknown exception" - << " (" << s.rdbuf()->inet_addr() << ":" << s.rdbuf()->port() + << " (" << net->rdbuf()->inet_addr() << ":" << net->rdbuf()->port() << ")" << endl; } } catch ( ... ) { } - s.close(); + net->close(); } } __FIT_DECLSPEC void NetTransport::connect( sockstream& s ) { + if ( !_handshake ) { + _do_handshake(); + return; + } + try { Event ev; gaddr_type dst; @@ -339,7 +350,7 @@ try { lock_guard<mutex> lk(manager()->_lock_tr); if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & EvManager::tracenet) ) { - *manager()->_trs << "Pid/ppid: " << xmt::getpid() << "/" << xmt::getppid() << "\n"; + *manager()->_trs << "Pid/ppid: " << std::tr2::getpid() << "/" << std::tr2::getppid() << "\n"; manager()->dump( *manager()->_trs ) << endl; } } @@ -354,7 +365,7 @@ if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & (EvManager::tracefault)) ) { *manager()->_trs << __FILE__ << ":" << __LINE__ << " (" - << xmt::getpid() << "/" << xmt::getppid() << ") " + << std::tr2::getpid() << "/" << std::tr2::getppid() << ") " << "Unknown destination\n"; manager()->dump( *manager()->_trs ) << endl; } @@ -511,7 +522,7 @@ try { lock_guard<mutex> lk(manager()->_lock_tr); if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & EvManager::tracenet) ) { - *manager()->_trs << "Pid/ppid: " << xmt::getpid() << "/" << xmt::getppid() << "\n"; + *manager()->_trs << "Pid/ppid: " << std::tr2::getpid() << "/" << std::tr2::getppid() << "\n"; manager()->dump( *manager()->_trs ) << endl; } } @@ -526,7 +537,7 @@ if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & (EvManager::tracefault)) ) { *manager()->_trs << __FILE__ << ":" << __LINE__ << " (" - << xmt::getpid() << "/" << xmt::getppid() << ") " + << std::tr2::getpid() << "/" << std::tr2::getppid() << ") " << "Unknown destination\n"; manager()->dump( *manager()->_trs ) << endl; } @@ -578,7 +589,7 @@ lock_guard<mutex> lk(manager()->_lock_tr); if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & E vManager::tracenet) ) { - *manager()->_trs << "Pid/ppid: " << xmt::getpid() << "/" << xmt::getppid() << + *manager()->_trs << "Pid/ppid: " << std::tr2::getpid() << "/" << std::tr2::getppid() << "\n"; manager()->dump( *manager()->_trs ) << endl; } @@ -594,7 +605,7 @@ if ( manager()->_trs != 0 && manager()->_trs->good() && (manager()->_trflags & (EvManager::tracefault)) ) { *manager()->_trs << __FILE__ << ":" << __LINE__ << " (" - << xmt::getpid() << "/" << xmt::getppid() << ") " + << std::tr2::getpid() << "/" << std::tr2::getppid() << ") " << "Unknown destination\n"; manager()->dump( *manager()->_trs ) << endl; } Modified: trunk/complement/explore/lib/stem/_EventHandler.cc =================================================================== --- trunk/complement/explore/lib/stem/_EventHandler.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/_EventHandler.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <08/06/27 12:32:30 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:16:58 yeti> /* * Copyright (c) 1995-1999, 2002, 2003, 2005, 2006, 2008 @@ -19,7 +19,9 @@ #include "stem/EventHandler.h" #include "stem/EvManager.h" #include "stem/Names.h" -#include "mt/mutex" +#include <mt/mutex> +#include <mt/thread> +#include <mt/uid.h> #include <unistd.h> @@ -265,7 +267,7 @@ __FIT_DECLSPEC gaddr_type EventHandler::self_glid() const { - return gaddr_type(xmt::hostid(), xmt::getpid(), _id ); + return gaddr_type(xmt::hostid(), std::tr2::getpid(), _id ); } } // namespace stem Modified: trunk/complement/explore/lib/stem/ut/Convert.cc =================================================================== --- trunk/complement/explore/lib/stem/ut/Convert.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/Convert.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,8 +1,8 @@ -// -*- C++ -*- Time-stamp: <07/07/20 00:05:52 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 19:08:00 yeti> /* * - * Copyright (c) 2007 + * Copyright (c) 2007, 2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -10,7 +10,10 @@ */ #include "Convert.h" +#include <mt/date_time> +using namespace std::tr2; + void mess::pack( std::ostream& s ) const { __pack( s, super_id ); @@ -35,65 +38,64 @@ __net_unpack( s, message ); } +int Convert::v = 0; + + Convert::Convert() : - EventHandler(), - v( 0 ) + EventHandler() { - cnd.set( false ); } Convert::Convert( stem::addr_type id ) : - EventHandler( id ), - v( 0 ) + EventHandler( id ) { - cnd.set( false ); } Convert::Convert( stem::addr_type id, const char *info ) : - EventHandler( id, info ), - v( 0 ) + EventHandler( id, info ) { - cnd.set( false ); } Convert::~Convert() { - // cnd.wait(); } void Convert::handler0() { + lock_guard<mutex> lk( mtx ); v = -1; - cnd.set(true); + cnd.notify_one(); } void Convert::handler1( const stem::Event& ) { + lock_guard<mutex> lk( mtx ); v = 1; - cnd.set(true); + cnd.notify_one(); } void Convert::handler2( const stem::Event_base<mess>& ev ) { + lock_guard<mutex> lk( mtx ); v = ev.value().super_id; m2 = ev.value().message; - cnd.set(true); + cnd.notify_one(); } void Convert::handler3( const mess& m ) { + lock_guard<mutex> lk( mtx ); v = m.super_id; m3 = m.message; - cnd.set(true); + cnd.notify_one(); } -void Convert::wait() +bool Convert::wait() { - cnd.try_wait(); - - cnd.set( false ); + unique_lock<mutex> lk( mtx ); + return cnd.timed_wait( lk, std::tr2::milliseconds( 500 ), v_nz_check ); } DEFINE_RESPONSE_TABLE( Convert ) Modified: trunk/complement/explore/lib/stem/ut/Convert.h =================================================================== --- trunk/complement/explore/lib/stem/ut/Convert.h 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/Convert.h 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,8 +1,8 @@ -// -*- C++ -*- Time-stamp: <07/07/20 00:03:52 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 19:07:02 yeti> /* * - * Copyright (c) 2007 + * Copyright (c) 2007, 2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -12,7 +12,8 @@ #ifndef __Convert_h #define __Convert_h -#include <mt/xmt.h> +#include <mt/mutex> +#include <mt/condition_variable> #include <stem/Event.h> #include <stem/EventHandler.h> @@ -53,16 +54,20 @@ void handler2( const stem::Event_base<mess>& ); void handler3( const mess& ); - void wait(); + bool wait(); - int v; + static int v; std::string m2; std::string m3; private: - xmt::condition cnd; + static bool v_nz_check() + { return v != 0; } + std::tr2::mutex mtx; + std::tr2::condition_variable cnd; + DECLARE_RESPONSE_TABLE( Convert, stem::EventHandler ); }; Modified: trunk/complement/explore/lib/stem/ut/Echo.cc =================================================================== --- trunk/complement/explore/lib/stem/ut/Echo.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/Echo.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/11/29 13:02:34 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 13:16:04 yeti> /* * Copyright (c) 2006, 2007 @@ -14,6 +14,7 @@ #include <stem/EvManager.h> #include <exam/suite.h> +#include <mt/date_time> using namespace stem; @@ -45,7 +46,8 @@ { // cerr << "Echo\n"; manager()->change_announce( ev.src(), ev.value() ); - cnd.set( true ); + + cnd.notify_one(); } DEFINE_RESPONSE_TABLE( StEMecho ) @@ -57,21 +59,18 @@ EventHandler(), mess( "echo string" ) { - cnd.set( false ); } EchoClient::EchoClient( stem::addr_type id ) : EventHandler( id ), mess( "echo string" ) { - cnd.set( false ); } EchoClient::EchoClient( stem::addr_type id, const char *info ) : EventHandler( id, info ), mess( "echo string" ) { - cnd.set( false ); } EchoClient::~EchoClient() @@ -82,12 +81,13 @@ void EchoClient::handler1( const stem::Event& ev ) { EXAM_CHECK_ASYNC( ev.value() == mess ); - cnd.set(true); + + cnd.notify_one(); } -void EchoClient::wait() +bool EchoClient::wait() { - cnd.try_wait(); + return cnd.timed_wait( std::tr2::milliseconds( 500 ) ); } DEFINE_RESPONSE_TABLE( EchoClient ) @@ -98,28 +98,24 @@ EventHandler(), mess( "peer client" ) { - cnd.set( false ); } PeerClient::PeerClient( stem::addr_type id ) : EventHandler( id ), mess( "peer client" ) { - cnd.set( false ); } PeerClient::PeerClient( const char *info ) : EventHandler( info ), mess( info ) { - cnd.set( false ); } PeerClient::PeerClient( stem::addr_type id, const char *info ) : EventHandler( id, info ), mess( info ) { - cnd.set( false ); } PeerClient::~PeerClient() @@ -131,12 +127,12 @@ { EXAM_CHECK_ASYNC( ev.value() == mess ); - cnd.set(true); + cnd.notify_one(); } -void PeerClient::wait() +bool PeerClient::wait() { - cnd.try_wait(); + return cnd.timed_wait( std::tr2::milliseconds( 500 ) ); } DEFINE_RESPONSE_TABLE( PeerClient ) Modified: trunk/complement/explore/lib/stem/ut/Echo.h =================================================================== --- trunk/complement/explore/lib/stem/ut/Echo.h 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/Echo.h 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,7 +1,7 @@ -// -*- C++ -*- Time-stamp: <07/07/11 21:45:09 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 13:15:07 yeti> /* - * Copyright (c) 2006, 2007 + * Copyright (c) 2006-2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -12,7 +12,7 @@ #define __Echo_h #include <string> -#include <mt/xmt.h> +#include <mt/condition_variable> #include <stem/EventHandler.h> // #include <stem/Names.h> // #include <list> @@ -28,7 +28,7 @@ void echo( const stem::Event& ); void regme( const stem::Event& ); - xmt::condition cnd; + std::tr2::condition_event cnd; private: DECLARE_RESPONSE_TABLE( StEMecho, stem::EventHandler ); @@ -45,12 +45,12 @@ void handler1( const stem::Event& ); - void wait(); + bool wait(); const std::string mess; private: - xmt::condition cnd; + std::tr2::condition_event cnd; DECLARE_RESPONSE_TABLE( EchoClient, stem::EventHandler ); }; @@ -67,12 +67,12 @@ void handler1( const stem::Event& ); - void wait(); + bool wait(); const std::string mess; private: - xmt::condition cnd; + std::tr2::condition_event cnd; DECLARE_RESPONSE_TABLE( PeerClient, stem::EventHandler ); }; Modified: trunk/complement/explore/lib/stem/ut/Makefile =================================================================== --- trunk/complement/explore/lib/stem/ut/Makefile 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/Makefile 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,4 +1,4 @@ -# -*- Makefile -*- Time-stamp: <08/06/12 15:25:10 ptr> +# -*- Makefile -*- Time-stamp: <08/06/30 11:54:35 yeti> SRCROOT := ../../.. @@ -16,25 +16,26 @@ LIBSOCK_DIR = ${CoMT_DIR}/lib/sockios LIBSTEM_DIR = ${CoMT_DIR}/lib/stem LIBEXAM_DIR = ${CoMT_DIR}/lib/exam +LIBMISC_DIR = ${CoMT_DIR}/lib/misc ifeq ($(OSNAME),linux) -release-shared: LDFLAGS += -L${LIBMT_DIR}/${OUTPUT_DIR} -L${LIBEXAM_DIR}/${OUTPUT_DIR} -L${LIBSOCK_DIR}/${OUTPUT_DIR} -L${LIBSTEM_DIR}/${OUTPUT_DIR} -Wl,--rpath=./dl/${OUTPUT_DIR}:${LIBMT_DIR}/${OUTPUT_DIR}:${LIBEXAM_DIR}/${OUTPUT_DIR}:${LIBSOCK_DIR}/${OUTPUT_DIR}:${LIBSTEM_DIR}/${OUTPUT_DIR}:${STLPORT_LIB_DIR} +release-shared: LDFLAGS += -L${LIBMT_DIR}/${OUTPUT_DIR} -L${LIBEXAM_DIR}/${OUTPUT_DIR} -L${LIBSOCK_DIR}/${OUTPUT_DIR} -L${LIBSTEM_DIR}/${OUTPUT_DIR} -L${LIBMISC_DIR}/${OUTPUT_DIR} -Wl,--rpath=./dl/${OUTPUT_DIR}:${LIBMT_DIR}/${OUTPUT_DIR}:${LIBEXAM_DIR}/${OUTPUT_DIR}:${LIBSOCK_DIR}/${OUTPUT_DIR}:${LIBSTEM_DIR}/${OUTPUT_DIR}:${LIBMISC_DIR}/${OUTPUT_DIR}:${STLPORT_LIB_DIR} +dbg-shared: LDFLAGS += -L${LIBMT_DIR}/${OUTPUT_DIR_DBG} -L${LIBEXAM_DIR}/${OUTPUT_DIR_DBG} -L${LIBSOCK_DIR}/${OUTPUT_DIR_DBG} -L${LIBSTEM_DIR}/${OUTPUT_DIR_DBG} -L${LIBMISC_DIR}/${OUTPUT_DIR_DBG} -Wl,--rpath=./dl/${OUTPUT_DIR_DBG}:${LIBMT_DIR}/${OUTPUT_DIR_DBG}:${LIBEXAM_DIR}/${OUTPUT_DIR_DBG}:${LIBSOCK_DIR}/${OUTPUT_DIR_DBG}:${LIBSTEM_DIR}/${OUTPUT_DIR_DBG}:${LIBMISC_DIR}/${OUTPUT_DIR_DBG}:${STLPORT_LIB_DIR} + ifndef WITHOUT_STLPORT -stldbg-shared: LDFLAGS += -L${LIBMT_DIR}/${OUTPUT_DIR_STLDBG} -L${LIBEXAM_DIR}/${OUTPUT_DIR_STLDBG} -L${LIBSOCK_DIR}/${OUTPUT_DIR_STLDBG} -L${LIBSTEM_DIR}/${OUTPUT_DIR_STLDBG} -Wl,--rpath=./dl/${OUTPUT_DIR_STLDBG}:${LIBMT_DIR}/${OUTPUT_DIR_STLDBG}:${LIBEXAM_DIR}/${OUTPUT_DIR_STLDBG}:${LIBSOCK_DIR}/${OUTPUT_DIR_STLDBG}:${LIBSTEM_DIR}/${OUTPUT_DIR_STLDBG}:${STLPORT_LIB_DIR} +stldbg-shared: LDFLAGS += -L${LIBMT_DIR}/${OUTPUT_DIR_STLDBG} -L${LIBEXAM_DIR}/${OUTPUT_DIR_STLDBG} -L${LIBSOCK_DIR}/${OUTPUT_DIR_STLDBG} -L${LIBSTEM_DIR}/${OUTPUT_DIR_STLDBG} -L${LIBMISC_DIR}/${OUTPUT_DIR_STLDBG} -Wl,--rpath=./dl/${OUTPUT_DIR_STLDBG}:${LIBMT_DIR}/${OUTPUT_DIR_STLDBG}:${LIBEXAM_DIR}/${OUTPUT_DIR_STLDBG}:${LIBSOCK_DIR}/${OUTPUT_DIR_STLDBG}:${LIBSTEM_DIR}/${OUTPUT_DIR_STLDBG}:${LIBMISC_DIR}/${OUTPUT_DIR_STLDBG}:${STLPORT_LIB_DIR} endif -dbg-shared: LDFLAGS += -L${LIBMT_DIR}/${OUTPUT_DIR_DBG} -L${LIBEXAM_DIR}/${OUTPUT_DIR_DBG} -L${LIBSOCK_DIR}/${OUTPUT_DIR_DBG} -L${LIBSTEM_DIR}/${OUTPUT_DIR_DBG} -Wl,--rpath=./dl/${OUTPUT_DIR_DBG}:${LIBMT_DIR}/${OUTPUT_DIR_DBG}:${LIBEXAM_DIR}/${OUTPUT_DIR_DBG}:${LIBSOCK_DIR}/${OUTPUT_DIR_DBG}:${LIBSTEM_DIR}/${OUTPUT_DIR_DBG}:${STLPORT_LIB_DIR} - endif -release-shared : LDLIBS = -lxmt -lsockios -lstem -lexam -ldl -dbg-shared : LDLIBS = -lxmtg -lsockiosg -lstemg -lexamg -ldl +release-shared : LDLIBS = -lxmt -lsockios -lstem -lexam -lmisc -ldl +dbg-shared : LDLIBS = -lxmtg -lsockiosg -lstemg -lexamg -lmiscg -ldl ifndef WITHOUT_STLPORT -stldbg-shared : LDLIBS = -lxmtstlg -lsockiosstlg -lstemstlg -lexamstlg -ldl +stldbg-shared : LDLIBS = -lxmtstlg -lsockiosstlg -lstemstlg -lexamstlg -lmiscstlg -ldl endif # dbg-shared: DEFS += -DDEBUG Modified: trunk/complement/explore/lib/stem/ut/NameService.cc =================================================================== --- trunk/complement/explore/lib/stem/ut/NameService.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/NameService.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,7 +1,7 @@ -// -*- C++ -*- Time-stamp: <06/11/29 10:50:21 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:47:39 yeti> /* - * Copyright (c) 2006, 2007 + * Copyright (c) 2006-2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -15,44 +15,43 @@ #include <stem/EDSEv.h> #include "NameService.h" +#include <mt/date_time> + using namespace std; using namespace stem; -using namespace xmt; +using namespace std::tr2; Naming::Naming() : EventHandler() { - cnd.set( false ); } Naming::Naming( stem::addr_type id ) : EventHandler( id ) { - cnd.set( false ); } Naming::~Naming() { - // cnd.wait(); } void Naming::names_list( const nsrecords_type& nr ) { copy( nr.container.begin(), nr.container.end(), back_insert_iterator<nsrecords_type::container_type>(lst) ); - cnd.set(true); + cnd.notify_one(); } void Naming::names_name( const nsrecords_type& nr ) { copy( nr.container.begin(), nr.container.end(), back_insert_iterator<nsrecords_type::container_type>(lst) ); - cnd.set(true); + cnd.notify_one(); } -void Naming::wait() +bool Naming::wait() { - cnd.try_wait(); + return cnd.timed_wait( std::tr2::milliseconds( 500 ) ); } DEFINE_RESPONSE_TABLE( Naming ) Modified: trunk/complement/explore/lib/stem/ut/NameService.h =================================================================== --- trunk/complement/explore/lib/stem/ut/NameService.h 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/NameService.h 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,7 +1,7 @@ -// -*- C++ -*- Time-stamp: <07/07/11 21:47:37 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:45:50 yeti> /* - * Copyright (c) 2006, 2007 + * Copyright (c) 2006-2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -11,7 +11,7 @@ #ifndef __NameService_h #define __NameService_h -#include <mt/xmt.h> +#include <mt/condition_variable> #include <stem/EventHandler.h> #include <stem/Names.h> #include <list> @@ -29,14 +29,14 @@ void names_list( const nsrecords_type& ); void names_name( const nsrecords_type& ); - void wait(); + bool wait(); void reset() - { cnd.set( false ); } + { cnd.reset(); } nsrecords_type::container_type lst; private: - xmt::condition cnd; + std::tr2::condition_event cnd; DECLARE_RESPONSE_TABLE( Naming, stem::EventHandler ); }; Modified: trunk/complement/explore/lib/stem/ut/Node.cc =================================================================== --- trunk/complement/explore/lib/stem/ut/Node.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/Node.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,8 +1,8 @@ -// -*- C++ -*- Time-stamp: <06/09/29 23:23:57 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:41:59 yeti> /* * - * Copyright (c) 2002, 2003, 2006, 2007 + * Copyright (c) 2002, 2003, 2006-2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -11,47 +11,47 @@ #include "Node.h" +#include <mt/date_time> + using namespace std; using namespace stem; -using namespace xmt; +using namespace std::tr2; Node::Node() : EventHandler(), v( 0 ) { - cnd.set( false ); } Node::Node( stem::addr_type id ) : EventHandler( id ), v( 0 ) { - cnd.set( false ); } Node::Node( stem::addr_type id, const char *info ) : EventHandler( id, info ), v( 0 ) { - cnd.set( false ); } Node::~Node() { - // cnd.wait(); } void Node::handler1( const stem::Event& ) { + lock_guard<mutex> lk( m ); // std::cerr << "I am here 1\n"; v = 1; - cnd.set(true); + cnd.notify_one(); // std::cerr << "I am here 2\n"; } -void Node::wait() +bool Node::wait() { - cnd.try_wait(); + unique_lock<mutex> lk( m ); + return cnd.timed_wait( lk, std::tr2::milliseconds( 500 ) ); } DEFINE_RESPONSE_TABLE( Node ) @@ -64,32 +64,31 @@ EventHandler(), v( 0 ) { - cnd.set( false ); } NewNode::NewNode( stem::addr_type id ) : EventHandler( id ), v( 0 ) { - cnd.set( false ); } NewNode::~NewNode() { - // cnd.wait(); } void NewNode::handler1( const stem::Event& ) { + lock_guard<mutex> lk( m ); // std::cerr << "I am here 1\n"; v = 1; - cnd.set(true); + cnd.notify_one(); // std::cerr << "I am here 2\n"; } -void NewNode::wait() +bool NewNode::wait() { - cnd.try_wait(); + unique_lock<mutex> lk( m ); + return cnd.timed_wait( lk, std::tr2::milliseconds( 500 ) ); } DEFINE_RESPONSE_TABLE( NewNode ) Modified: trunk/complement/explore/lib/stem/ut/Node.h =================================================================== --- trunk/complement/explore/lib/stem/ut/Node.h 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/Node.h 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,8 +1,8 @@ -// -*- C++ -*- Time-stamp: <07/07/11 21:47:25 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:54:21 yeti> /* * - * Copyright (c) 2002, 2003, 2006, 2007 + * Copyright (c) 2002, 2003, 2006-2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -12,7 +12,8 @@ #ifndef __Node_h #define __Node_h -#include <mt/xmt.h> +#include <mt/mutex> +#include <mt/condition_variable> #include <stem/EventHandler.h> class Node : @@ -26,12 +27,13 @@ void handler1( const stem::Event& ); - void wait(); + bool wait(); int v; private: - xmt::condition cnd; + std::tr2::mutex m; + std::tr2::condition_variable cnd; DECLARE_RESPONSE_TABLE( Node, stem::EventHandler ); }; @@ -47,12 +49,13 @@ void handler1( const stem::Event& ); - void wait(); + bool wait(); int v; private: - xmt::condition cnd; + std::tr2::mutex m; + std::tr2::condition_variable cnd; DECLARE_RESPONSE_TABLE( NewNode, stem::EventHandler ); }; Modified: trunk/complement/explore/lib/stem/ut/NodeDL.h =================================================================== --- trunk/complement/explore/lib/stem/ut/NodeDL.h 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/NodeDL.h 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,8 +1,8 @@ -// -*- C++ -*- Time-stamp: <07/07/11 21:47:58 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:35:02 yeti> /* * - * Copyright (c) 2002, 2003, 2006, 2007 + * Copyright (c) 2002, 2003, 2006-2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -12,7 +12,8 @@ #ifndef __NodeDL_h #define __NodeDL_h -#include <mt/xmt.h> +#include <mt/mutex> +#include <mt/condition_variable> #include <stem/EventHandler.h> class NodeDL : @@ -25,12 +26,13 @@ void handler1( const stem::Event& ); - void wait(); + bool wait(); int v; private: - xmt::condition cnd; + std::tr2::mutex m; + std::tr2::condition_variable cnd; DECLARE_RESPONSE_TABLE( NodeDL, stem::EventHandler ); }; @@ -46,12 +48,13 @@ void handler1( const stem::Event& ); - void wait(); + bool wait(); int v; private: - xmt::condition cnd; + std::tr2::mutex m; + std::tr2::condition_variable cnd; DECLARE_RESPONSE_TABLE( NewNodeDL, stem::EventHandler ); }; @@ -59,7 +62,7 @@ #define NODE_EV2 0x901 extern "C" void *create_NewNodeDL( unsigned ); -extern "C" void wait_NewNodeDL( void * ); +extern "C" int wait_NewNodeDL( void * ); extern "C" int v_NewNodeDL( void * ); extern "C" void destroy_NewNodeDL( void * ); Modified: trunk/complement/explore/lib/stem/ut/dl/loadable_stem.cc =================================================================== --- trunk/complement/explore/lib/stem/ut/dl/loadable_stem.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/dl/loadable_stem.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,8 +1,8 @@ -// -*- C++ -*- Time-stamp: <06/09/29 22:53:34 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 18:36:09 yeti> /* * - * Copyright (c) 2002, 2003, 2006, 2007 + * Copyright (c) 2002, 2003, 2006-2008 * Petr Ovtchenkov * * Licensed under the Academic Free License version 3.0 @@ -12,19 +12,18 @@ #include "../NodeDL.h" using namespace stem; +using namespace std::tr2; NodeDL::NodeDL() : EventHandler(), v( 0 ) { - cnd.set( false ); } NodeDL::NodeDL( stem::addr_type id ) : EventHandler( id ), v( 0 ) { - cnd.set( false ); } NodeDL::~NodeDL() @@ -33,13 +32,15 @@ void NodeDL::handler1( const stem::Event& ) { + lock_guard<mutex> lk( m ); v = 1; - cnd.set(true); + cnd.notify_one(); } -void NodeDL::wait() +bool NodeDL::wait() { - cnd.try_wait(); + unique_lock<mutex> lk( m ); + return cnd.timed_wait( lk, std::tr2::milliseconds( 500 ) ); } DEFINE_RESPONSE_TABLE( NodeDL ) @@ -52,14 +53,12 @@ EventHandler(), v( 0 ) { - cnd.set( false ); } NewNodeDL::NewNodeDL( stem::addr_type id ) : EventHandler( id ), v( 0 ) { - cnd.set( false ); } NewNodeDL::~NewNodeDL() @@ -68,13 +67,15 @@ void NewNodeDL::handler1( const stem::Event& ) { + lock_guard<mutex> lk( m ); v = 1; - cnd.set(true); + cnd.notify_one(); } -void NewNodeDL::wait() +bool NewNodeDL::wait() { - cnd.try_wait(); + unique_lock<mutex> lk( m ); + return cnd.timed_wait( lk, std::tr2::milliseconds( 500 ) ); } DEFINE_RESPONSE_TABLE( NewNodeDL ) @@ -86,9 +87,9 @@ return (void *)new NewNodeDL( a ); } -void wait_NewNodeDL( void *p ) +int wait_NewNodeDL( void *p ) { - reinterpret_cast<NewNodeDL *>( p )->wait(); + return reinterpret_cast<NewNodeDL *>( p )->wait() ? 1 : 0; } int v_NewNodeDL( void *p ) Modified: trunk/complement/explore/lib/stem/ut/unit_test.cc =================================================================== --- trunk/complement/explore/lib/stem/ut/unit_test.cc 2008-07-01 14:41:10 UTC (rev 1934) +++ trunk/complement/explore/lib/stem/ut/unit_test.cc 2008-07-01 14:41:36 UTC (rev 1935) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <08/06/27 13:14:16 ptr> +// -*- C++ -*- Time-stamp: <08/06/30 19:19:39 yeti> /* * Copyright (c) 2002, 2003, 2006-2008 @@ -41,6 +41,8 @@ #include <signal.h> +#include <misc/opts.h> + using namespace std; using namespace std::tr2; @@ -161,7 +163,7 @@ EXAM_REQUIRE( lh != NULL ); void *(*f)(unsigned); void (*g)(void *); - void (*w)(void *); + int (*w)(void *); int (*v)(void *); *(void **)(&f) = dlsym( lh, "create_NewNodeDL" ); @@ -178,7 +180,7 @@ ev.dest( 2002 ); node->Send( ev ); - w( reinterpret_cast<void *>(node) ); + EXAM_CHECK( w( reinterpret_cast<void *>(node) ) == 1 ); EXAM_CHECK( v(reinterpret_cast<void *>(node)) == 1 ); g( reinterpret_cast<void *>(node) ); @@ -289,7 +291,7 @@ node.Send( ev ); - node.wait(); + EXAM_CHECK( node.wait() ); mgr.close(); mgr.join(); @@ -305,8 +307,8 @@ const char fname[] = "/tmp/stem_test.shm"; xmt::shm_alloc<0> seg; -xmt::allocator_shm<xmt::__condition<true>,0> shm_cnd; -xmt::allocator_shm<xmt::__barrier<true>,0> shm_b; +xmt::allocator_shm<condition_event_ip,0> shm_cnd; +xmt::allocator_shm<barrier_ip,0> shm_b; stem_test::stem_test() { @@ -314,7 +316,16 @@ seg.allocate( fname, 4*4096, xmt::shm_base::create | xmt::shm_base::exclusive, 0600 ); } catch ( const xmt::shm_bad_alloc& err ) { - EXAM_ERROR_ASYNC( err.what() ); + try { + seg.allocate( fname, 4*4096, 0, 0600 ); + } + catch ( const xmt::shm_bad_alloc& err2 ) { + string s = err.what(); + s += "; "; + s += err2.what(); + EXAM_ERROR_ASYNC( s.c_str() ); + } + // EXAM_ERROR_ASYNC( err.what() ); } } @@ -326,18 +337,17 @@ int EXAM_IMPL(stem_test::echo_net) { - xmt::__condition<true>& fcnd = *new ( shm_cnd.allocate( 1 ) ) xmt::__condition<true>(); - fcnd.set( false ); + condition_event_ip& fcnd = *new ( shm_cnd.allocate( 1 ) ) condition_event_ip(); try { - xmt::fork(); + std::tr2::this_thread::fork(); int eflag = 0; try { stem::NetTransportMgr mgr; - fcnd.try_wait(); + EXAM_CHECK_ASYNC_F( fcnd.timed_wait( std::tr2::milliseconds( 800 ) ), eflag ); stem::addr_type zero = mgr.open( "localhost", 6995 ); @@ -353,7 +363,7 @@ node.Send( ev ); - node.wait(); + EXAM_CHECK_ASYNC_F( node.wait(), eflag ); mgr.close(); mgr.join(); @@ -363,13 +373,13 @@ exit( eflag ); } - catch ( xmt::fork_in_parent& child ) { + catch ( std::tr2::fork_in_parent& child ) { try { connect_processor<stem::NetTransport> srv( 6995 ); StEMecho echo( 0, "echo service"); // <= zero! - fcnd.set( true ); + fcnd.notify_one(); int stat = -1; EXAM_CHECK( waitpid( child.pid(), &stat, 0 ) == child.pid() ); @@ -386,7 +396,7 @@ } } - (&fcnd)->~__condition<true>(); + (&fcnd)->~condition_event_ip(); shm_cnd.deallocate( &fcnd, 1 ); // cerr << "Fine\n"; @@ -399,13 +409,11 @@ int EXAM_IMPL(stem_test::net_echo) { try { - xmt::__barrier<true>& b = *new ( shm_b.allocate( 1 ) ) xmt::__barrier<true>(); - xmt::__condition<true>& c = *new ( shm_cnd.allocate( 1 ) ) xmt::__condition<true>(); + barrier_ip& b = *new ( shm_b.allocate( 1 ) ) barrier_ip(); + condition_event_ip& c = *new ( shm_cnd.allocate( 1 ) ) condition_event_ip(); - c.set( false ); - try { - xmt::fork(); + std::tr2::this_thread::fork(); int eflag = 0; // server part @@ -417,7 +425,7 @@ // echo.manager()->settrs( &std::cerr ); EXAM_CHECK_ASYNC_F( srv.good(), eflag ); - c.set( true ); // ok, server listen + c.notify_one(); // ok, server listen b.wait(); // server may go away @@ -427,14 +435,14 @@ exit( eflag ); } - catch ( xmt::fork_in_parent& child ) { + catch ( std::tr2::fork_in_parent& child ) { // client part stem::NetTransportMgr mgr; // mgr.manager()->settrf( stem::EvManager::tracenet | stem::EvManager::tracedispatch | stem::EvManager::tracefault ); // mgr.manager()->settrs( &std::cerr ); - c.try_wait(); // wait server start + EXAM_CHECK( c.timed_wait( std::tr2::milliseconds( 800 ) ) ); // wait server start stem::addr_type zero = mgr.open( "localhost", 6995 ); @@ -448,7 +456,7 @@ ev.value() = node.mess; node.Send( ev ); - node.wait(); + EXAM_CHECK( node.wait() ); mgr.close(); mgr.join(); @@ -464,9 +472,9 @@ } } - (&c)->~__condition<true>(); + (&c)->~condition_event_ip(); shm_cnd.deallocate( &c, 1 ); - (&b)->~__barrier<true>(); + (&b)->~barrier_ip(); shm_b.deallocate( &b, 1 ); } catch ( xmt::shm_bad_alloc& err ) { @@ -504,18 +512,13 @@ pid_t fpid; - xmt::__condition<true>& fcnd = *new ( shm_cnd.allocate( 1 ) ) xmt::__condition<true>(); - fcnd.set( false ); + condition_event_ip& fcnd = *new ( shm_cnd.allocate( 1 ) ) condition_event_ip(); + condition_event_ip& pcnd = *new ( shm_cnd.allocate( 1 ) ) condition_event_ip(); + condition_event_ip& scnd = *new ( shm_cnd.allocate( 1 ) ) condition_event_ip(); - xmt::__condition<true>& pcnd = *new ( shm_cnd.allocate( 1 ) ) xmt::__condition<true>(); - pcnd.set( false ); - - xmt::__condition<true>& scnd = *new ( shm_cnd.allocate( 1 ) ) xmt::__condition<true>(); - scnd.set( false ); - try { // Client 1 - xmt::fork(); + std::tr2::this_thread::fork(); #if 0 struct sigaction action; struct sigaction old_action; @@ -539,7 +542,7 @@ PeerClient c1( "c1 local" ); // c1 client Naming nm; - fcnd.try_wait(); + EXAM_CHECK_ASYNC_F( fcnd.timed_wait( std::tr2::milliseconds( 800 ) ), eflag ); 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 @@ -568,7 +571,7 @@ evname.dest( c1.manager()->reflect( ga ) ); evname.value() = "c2@here"; - pcnd.try_wait(); + EXAM_CHECK_ASYNC_F( pcnd.timed_wait( std::tr2::milliseconds( 800 ) ), eflag ); Naming::nsrecords_type::const_iterator i; @@ -602,7 +605,7 @@ c1.Send( pe ); } - scnd.try_wait(); + EXAM_CHECK_ASYNC_F( scnd.timed_wait( std::tr2::milliseconds( 800 ) ), eflag ); mgr.close(); mgr.join(); @@ -613,13 +616,13 @@ exit( eflag ); } - catch ( xmt::fork_in_parent& child ) { + catch ( std::tr2::fork_in_parent& child ) { fpid = child.pid(); } try { // Client 2 - xmt::fork(); + std::tr2::this_thread::fork(); #if 0 struct sigaction action; @@ -643,7 +646,7 @@ // ^ PeerClient c2( "c2 local" ); // <<--- name the same as mess expected ... | - fcnd.try_wait(); + EXAM_CHECK_ASYNC_F( fcnd.timed_wait( std::tr2::milliseconds( 800 ) ), eflag ); 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 @@ -657,11 +660,11 @@ ev.value() = "c2@here"; c2.Send( ev ); // 'register' c2 client on 'echo' server - pcnd.set( true ); + pcnd.notify_one(); c2.wait(); // cerr << "Fine!" << endl; - scnd.set( true ); + scnd.notify_one(); mgr.close(); mgr.join(); @@ -672,11 +675,11 @@ exit( eflag ); } - catch ( xmt::fork_in_parent& child ) { + catch ( std::tr2::fork_in_parent& child ) { connect_processor<stem::NetTransport> srv( 6995 ); // server, it serve 'echo' StEMecho echo( 0, "echo service"); // <= zero! 'echo' server, default ('zero' address) - fcnd.set( true, true ); + fcnd.notify_all(); int stat = -1; EXAM_CHECK( waitpid( child.pid(), &stat, 0 ) == child.pid() ); @@ -697,11 +700,11 @@ srv.wait(); } - (&fcnd)->~__condition<true>(); + (&fcnd)->~condition_event_ip(); shm_cnd.deallocate( &fcnd, 1 ); - (&pcnd)->~__condition<true>(); + (&pcnd)->~condition_event_ip(); shm_cnd.deallocate( &pcnd, 1 ); - (&scnd)->~__condition<true>(); + (&scnd)->~condition_event_ip(); shm_cnd.deallocate( &scnd, 1 ); return EXAM_RESULT; @@ -709,17 +712,16 @@ int EXAM_IMPL(stem_test::boring_manager) { - xmt::__condition<true>& fcnd = *new ( shm_cnd.allocate( 1 ) ) xmt::__condition<true>(); - fcnd.set( false ); + condition_event_ip& fcnd = *new ( shm_cnd.allocate( 1 ) ) condition_event_ip(); try { // Client - xmt::fork(); + std::tr2::this_thread::fork(); int eflag = 0; try { - fcnd.try_wait(); + EXAM_CHECK_ASYNC_F( fcnd.timed_wait( std::tr2::milliseconds( 800 ) ), eflag ); for ( int i = 0; i < 10; ++i ) { const int n = 10; @@ -745,11 +747,11 @@ } exit( eflag ); } - catch ( xmt::fork_in_parent& child ) { + catch ( std::tr2::fork_in_parent& child ) { connect_processor<stem::NetTransport> srv( 6995 ); // server, it serve 'echo' StEMecho echo( 0, "echo service"); // <= zero! 'echo' server, default ('zero' address) - fcnd.set( true, true ); + fcnd.notify_all(); int stat = -1; EXAM_CHECK( waitpid( child.pid(), &stat, 0 ) == child.pid() ); @@ -763,7 +765,7 @@ srv.wait(); } - (&fcnd)->~__condition<true>(); + (&fcnd)->~condition_event_ip(); shm_cnd.deallocate( &fcnd, 1 ); return EXAM_RESULT; @@ -784,10 +786,11 @@ conv.Send( ev ); - conv.wait(); - + EXAM_CHECK( conv.wait() ); EXAM_CHECK( conv.v == -1 ); + conv.v = 0; + stem::Event_base<mess> ev1( CONV_EV1 ); ev1.dest( conv.self_id() ); @@ -795,10 +798,11 @@ conv.Send( ev1 ); - conv.wait(); - + EXAM_CHECK( conv.wait() ); EXAM_CHECK( conv.v == 1 ); + conv.v = 0; + stem::Event_base<mess> ev2( CONV_EV2 ); ev2.dest( conv.self_id() ); @@ -806,11 +810,13 @@ conv.Send( ev2 ); - conv.wait(); + EXAM_CHECK( conv.wait() ); EXAM_CHECK( conv.v == 2 ); EXAM_CHECK( conv.m2 == "hello" ); + conv.v = 0; + stem::Event_base<mess> ev3( CONV_EV3 ); ev3.dest( conv.self_id() ); @@ -819,21 +825,17 @@ conv.Send( ev3 ); - conv.wait(); + EXAM_CHECK( conv.wait() ); EXAM_CHECK( conv.v == 3 ); EXAM_CHECK( conv.m3 == ", wold!" ); + conv.v = 0; + return EXAM_RESULT; } -// ----------------- - -// ----------------- - -int EXAM_DECL(stem_test_suite); - -int EXAM_IMPL(stem_test_suite) +int main( int argc, const char** argv ) { exam::test_suite::test_case_type tc[4]; @@ -858,10 +860,52 @@ t.add( &stem_test::convert, test, "convert", tc[0] ); + Opts opts; + + opts.description( "test suite for 'StEM' framework" ); + opts.usage( "[options]" ); + + opts << option<bool>( "print this help message", 'h', "help" ) + << option<bool>( "list all test cases", 'l', "list" ) + << option<string>( "run tests by number", 'r', "run" )["0"] + << option<bool>( "print status of tests within test suite", 'v', "verbose" ) + << option<bool>( "trace checks", 't', "trace" ); + + try { + opts.parse( argc, argv ); + } + catch (...) { + opts.help( cerr ); + return 1; + } + + if ( opts.is_set( 'h' ) ) { + opts.help( cerr ); + return 0; + } + + if ( opts.is_set( 'l' ) ) { + t.print_graph( cerr ); + return 0; + } + + if ( opts.is_set( 'v' ) ) { + t.flags( t.flags() | exam::base_logger::verbose ); + } + + if ( opts.is_set( 't' ) ) { + t.flags( t.flags() | exam::base_logger::trace ); + } + + if ( opts.is_set( 'r' ) ) { + stringstream ss( opts.get<string>( 'r' ) ); + int n; + while ( ss >> n ) { + t.single( n ); + } + + return 0; + } + return t.girdle(); } - -int main( int, char ** ) -{ - return stem_test_suite(0); -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |