[complement-svn] SF.net SVN: complement: [1742] trunk/complement/explore
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2007-09-24 19:04:29
|
Revision: 1742 http://complement.svn.sourceforge.net/complement/?rev=1742&view=rev Author: complement Date: 2007-09-24 12:04:25 -0700 (Mon, 24 Sep 2007) Log Message: ----------- rename loop_id to loop_thr, for correct interpretation; clean main loop of connection_processor; initialize buffer; reduce number of iterations for test; libsockios: Version 1.13.0. Modified Paths: -------------- trunk/complement/explore/include/sockios/sockmgr.cc trunk/complement/explore/include/sockios/sockmgr.h trunk/complement/explore/lib/sockios/ChangeLog trunk/complement/explore/lib/sockios/Makefile.inc trunk/complement/explore/lib/sockios/ut/sockios_test.cc trunk/complement/explore/lib/sockios/ut/sockios_test_suite.cc Modified: trunk/complement/explore/include/sockios/sockmgr.cc =================================================================== --- trunk/complement/explore/include/sockios/sockmgr.cc 2007-09-24 18:50:50 UTC (rev 1741) +++ trunk/complement/explore/include/sockios/sockmgr.cc 2007-09-24 19:04:25 UTC (rev 1742) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <07/09/13 23:10:08 ptr> +// -*- C++ -*- Time-stamp: <07/09/19 11:43:21 ptr> /* * Copyright (c) 1997-1999, 2002, 2003, 2005-2007 @@ -63,7 +63,7 @@ } _loop_cnd.set( false ); - loop_id.launch( loop, this, 0, PTHREAD_STACK_MIN * 2 ); + loop_thr.launch( loop, this, 0, PTHREAD_STACK_MIN * 2 ); _loop_cnd.try_wait(); } } @@ -376,7 +376,7 @@ xmt::Thread::ret_t sockmgr_stream_MP<Connect,C,T>::loop( void *p ) { _Self_type *me = static_cast<_Self_type *>(p); - me->loop_id.pword( _idx ) = me; // push pointer to self for signal processing + me->loop_thr.pword( _idx ) = me; // push pointer to self for signal processing xmt::Thread::ret_t rtc = 0; xmt::Thread::ret_t rtc_observer = 0; @@ -387,7 +387,7 @@ me->_follow = true; - while ( (me->*me->_accept)() ) { + while ( (me->*me->_accept)() /* && me->_is_follow() */ ) { if ( thr_observer.bad() ) { if ( thr_observer.is_join_req() ) { rtc_observer = thr_observer.join(); @@ -421,6 +421,7 @@ // me->_c_lock.unlock(); rtc_observer = thr_observer.join(); + xmt::scoped_lock _l( me->_c_lock ); me->_M_c.clear(); // FIN still may not come yet; force close if ( rtc_observer != 0 && rtc == 0 ) { rtc = reinterpret_cast<xmt::Thread::ret_t>(-2); // there was connect_processor that was killed @@ -436,75 +437,74 @@ try { timespec idle( me->_idle ); + typename _Sequence::iterator c; - me->_dlock.lock(); - typename _Sequence::iterator c; - bool _non_empty = false; - if ( me->_conn_pool.size() != 0 ) { + { + xmt::scoped_lock lk(me->_dlock); + if ( me->_conn_pool.empty() ) { + me->_pool_cnd.set( false ); + me->_observer_cnd.set( false ); + return 0; + } c = me->_conn_pool.front(); me->_conn_pool.pop_front(); - _non_empty = true; xmt::gettime( &me->_tpop ); } - me->_dlock.unlock(); do { - if ( _non_empty ) { - sockstream& stream = c->s; - if ( stream.is_open() ) { - (c->_proc->*C)( stream ); - if ( stream.is_open() && stream.good() ) { - if ( stream.rdbuf()->in_avail() > 0 ) { - // socket has buffered data, push it back to queue - xmt::scoped_lock lk(me->_dlock); - me->_conn_pool.push_back( c ); - me->_observer_cnd.set( true ); - me->_pool_cnd.set( true ); - if ( !me->_follow ) { - break; - } - c = me->_conn_pool.front(); - me->_conn_pool.pop_front(); - xmt::gettime( &me->_tpop ); - // xmt::Thread::gettime( &me->_tpush ); - continue; - } else { // no buffered data, return socket to poll - sock_base::socket_type rfd = stream.rdbuf()->fd(); - ::write( me->_cfd, reinterpret_cast<const char *>(&rfd), sizeof(sock_base::socket_type) ); + sockstream& stream = c->s; + if ( stream.is_open() ) { + (c->_proc->*C)( stream ); + if ( stream.is_open() && stream.good() ) { + if ( stream.rdbuf()->in_avail() > 0 ) { + // socket has buffered data, push it back to queue + xmt::scoped_lock lk(me->_dlock); + me->_conn_pool.push_back( c ); + me->_observer_cnd.set( true ); + me->_pool_cnd.set( true ); + if ( !me->_follow ) { + break; } - } else { - me->_dlock.lock(); - me->_conn_pool.erase( std::remove( me->_conn_pool.begin(), me->_conn_pool.end(), c ), me->_conn_pool.end() ); - me->_dlock.unlock(); + c = me->_conn_pool.front(); + me->_conn_pool.pop_front(); + xmt::gettime( &me->_tpop ); + // xmt::Thread::gettime( &me->_tpush ); + continue; + } else { // no buffered data, return socket to poll + sock_base::socket_type rfd = stream.rdbuf()->fd(); + ::write( me->_cfd, reinterpret_cast<const char *>(&rfd), sizeof(sock_base::socket_type) ); + } + } else { + me->_dlock.lock(); + me->_conn_pool.erase( std::remove( me->_conn_pool.begin(), me->_conn_pool.end(), c ), me->_conn_pool.end() ); + me->_dlock.unlock(); - xmt::scoped_lock _l( me->_c_lock ); - me->_M_c.erase( c ); - } + xmt::scoped_lock _l( me->_c_lock ); + me->_M_c.erase( c ); } } - _non_empty = false; - - if ( me->_pool_cnd.try_wait_delay( &idle ) == 0 ) { + { xmt::scoped_lock lk(me->_dlock); - if ( !me->_follow ) { - return 0; + if ( me->_conn_pool.empty() ) { + lk.unlock(); + if ( me->_pool_cnd.try_wait_delay( &idle ) != 0 ) { + lk.lock(); + me->_pool_cnd.set( false ); + me->_observer_cnd.set( false ); + return 0; + } + if ( !me->_is_follow() ) { // before _conn_pool.front() + return 0; + } + lk.lock(); + if ( me->_conn_pool.empty() ) { + return 0; + } } - if ( me->_conn_pool.size() != 0 ) { - c = me->_conn_pool.front(); - me->_conn_pool.pop_front(); - _non_empty = true; - xmt::gettime( &me->_tpop ); - } else { - me->_pool_cnd.set( false ); - me->_observer_cnd.set( false ); - return 0; - } - } else { - xmt::scoped_lock lk(me->_dlock); - me->_pool_cnd.set( false ); - me->_observer_cnd.set( false ); - return 0; + c = me->_conn_pool.front(); + me->_conn_pool.pop_front(); + xmt::gettime( &me->_tpop ); } } while ( me->_is_follow() ); } @@ -610,7 +610,7 @@ FD_SET( fd_unsafe(), &_pfde ); _fdmax = fd_unsafe(); - loop_id.launch( loop, this, 0, PTHREAD_STACK_MIN * 2 ); + loop_thr.launch( loop, this, 0, PTHREAD_STACK_MIN * 2 ); } } Modified: trunk/complement/explore/include/sockios/sockmgr.h =================================================================== --- trunk/complement/explore/include/sockios/sockmgr.h 2007-09-24 18:50:50 UTC (rev 1741) +++ trunk/complement/explore/include/sockios/sockmgr.h 2007-09-24 19:04:25 UTC (rev 1742) @@ -192,7 +192,7 @@ } ~sockmgr_stream_MP() - { loop_id.join(); } + { loop_thr.join(); } private: sockmgr_stream_MP( const sockmgr_stream_MP<Connect,C,T>& ); @@ -207,7 +207,7 @@ { basic_sockmgr::close(); } void wait() - { loop_id.join(); } + { loop_thr.join(); } void detach( sockstream& ) // remove sockstream from polling in manager { } @@ -237,7 +237,7 @@ { } ~_Connect() - { if ( _proc ) { s.close(); (_proc->*T)(); } delete _proc; } + { if ( _proc ) { s.close(); (_proc->*T)(); delete _proc; _proc = 0; } } void open( sock_base::socket_type st, const sockaddr& addr, sock_base::stype t = sock_base::sock_stream ) { s.open( st, addr, t ); _proc = new Connect( s ); } @@ -289,7 +289,7 @@ bool accept_udp(); private: - xmt::Thread loop_id; + xmt::Thread loop_thr; protected: typedef sockmgr_stream_MP<Connect,C,T> _Self_type; Modified: trunk/complement/explore/lib/sockios/ChangeLog =================================================================== --- trunk/complement/explore/lib/sockios/ChangeLog 2007-09-24 18:50:50 UTC (rev 1741) +++ trunk/complement/explore/lib/sockios/ChangeLog 2007-09-24 19:04:25 UTC (rev 1742) @@ -1,3 +1,13 @@ +2007-09-24 Petr Ovtchenkov <pt...@is...> + + * sockios/sockmgr.h, sockios/sockmgr.cc: rename loop_id to loop_thr, + for correct interpretation; clean main loop of connection_processor; + + * ut/sockios_test.cc: initialize buffer; reduce number of iterations + for test; + + * libsockios: Version 1.13.0. + 2007-09-07 Petr Ovtchenkov <pt...@is...> * sockstream, sockstream.cc: prepare for __FIT_NONBLOCK_SOCKETS. Modified: trunk/complement/explore/lib/sockios/Makefile.inc =================================================================== --- trunk/complement/explore/lib/sockios/Makefile.inc 2007-09-24 18:50:50 UTC (rev 1741) +++ trunk/complement/explore/lib/sockios/Makefile.inc 2007-09-24 19:04:25 UTC (rev 1742) @@ -1,9 +1,9 @@ -# -*- Makefile -*- Time-stamp: <07/07/12 00:53:38 ptr> +# -*- Makefile -*- Time-stamp: <07/09/24 22:52:43 ptr> LIBNAME = sockios MAJOR = 1 -MINOR = 12 -PATCH = 1 +MINOR = 13 +PATCH = 0 SRC_CC = _sockstream.cc _sockmgr.cc SRC_C = freebsd/getaddrinfo.c \ freebsd/ns_parse.c \ Modified: trunk/complement/explore/lib/sockios/ut/sockios_test.cc =================================================================== --- trunk/complement/explore/lib/sockios/ut/sockios_test.cc 2007-09-24 18:50:50 UTC (rev 1741) +++ trunk/complement/explore/lib/sockios/ut/sockios_test.cc 2007-09-24 19:04:25 UTC (rev 1742) @@ -664,7 +664,7 @@ char buf[1024]; int count = 0; - for ( int i = 0; i < 1024 * 1024; ++i ) { + for ( int i = 0; i < 128 * 1024; ++i ) { s.read( buf, 1024 ); } cnd.set( true ); @@ -693,7 +693,9 @@ char buf[1024]; - for ( int i = 0; i < 1024 * 1024; ++i ) { + fill( buf, buf + 1024, ' ' ); + + for ( int i = 0; i < 128 * 1024; ++i ) { s.write( buf, 1024 ); } s.flush(); Modified: trunk/complement/explore/lib/sockios/ut/sockios_test_suite.cc =================================================================== --- trunk/complement/explore/lib/sockios/ut/sockios_test_suite.cc 2007-09-24 18:50:50 UTC (rev 1741) +++ trunk/complement/explore/lib/sockios/ut/sockios_test_suite.cc 2007-09-24 19:04:25 UTC (rev 1742) @@ -36,6 +36,8 @@ exam::test_suite t( "libsockios test" ); + // t.flags( t.flags() | exam::base_logger::trace ); + trivial_sockios_test trivial_test; tc[0] = t.add( &trivial_sockios_test::simple, trivial_test, "trivial_sockios_test::simple" ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |