From 7dfee13b9347a2b4626f9d6ab290ed6aa1d63061 Mon Sep 17 00:00:00 2001 From: okada Date: Tue, 3 Mar 2009 09:41:25 +0000 Subject: [PATCH] =?utf8?q?#325=20tcp=5Fsocket=E3=81=AE=E3=83=AD=E3=83=83?= =?utf8?q?=E3=82=AF=E7=AE=87=E6=89=80=E3=82=92=E8=A6=8B=E7=9B=B4=E3=81=97?= =?utf8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: http://10.144.169.20/repos/um/branches/l7vsd-3.x-shamshel-PT@7402 1ed66053-1c2d-0410-8867-f7571e6e31d3 --- include/tcp_socket.h | 3 ++- src/tcp_session.cpp | 2 +- src/tcp_socket.cpp | 14 ++++++++------ src/virtualservice_tcp.cpp | 23 +++++++++++------------ 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/include/tcp_socket.h b/include/tcp_socket.h index 0bfacff5..90d920cf 100644 --- a/include/tcp_socket.h +++ b/include/tcp_socket.h @@ -63,7 +63,8 @@ namespace l7vs{ //! control socket boost::asio::ip::tcp::socket my_socket; //! socket close mutex - boost::mutex socket_mutex; + boost::mutex read_mutex; + boost::mutex write_mutex; //! socket open flag bool open_flag; diff --git a/src/tcp_session.cpp b/src/tcp_session.cpp index 3744ae48..2849e77f 100644 --- a/src/tcp_session.cpp +++ b/src/tcp_session.cpp @@ -331,8 +331,8 @@ namespace l7vs{ //! @return true is wait //! @return false is not wait bool tcp_session::is_thread_wait(){ - boost::mutex::scoped_lock scope_lock(thread_state_update_mutex); bool res = false; + boost::mutex::scoped_lock scope_lock(thread_state_update_mutex); if(thread_state.test(4) & thread_state.test(5)) res = true; return res; diff --git a/src/tcp_socket.cpp b/src/tcp_socket.cpp index 1d4be381..e7e050a1 100644 --- a/src/tcp_socket.cpp +++ b/src/tcp_socket.cpp @@ -45,7 +45,8 @@ namespace l7vs{ boost::system::error_code& ec){ Logger logger( LOG_CAT_L7VSD_SESSION, 9999, "tcp_socket::connect", __FILE__, __LINE__ ); - boost::mutex::scoped_lock scope_lock(socket_mutex); + boost::mutex::scoped_lock lk(read_mutex); + boost::mutex::scoped_lock lk2(write_mutex); if(!open_flag){ my_socket.connect(connect_endpoint,ec); @@ -71,7 +72,7 @@ namespace l7vs{ //! accept socket void tcp_socket::accept(){ - boost::mutex::scoped_lock scope_lock(socket_mutex); + boost::mutex::scoped_lock lk(read_mutex); open_flag = true; //----Debug log---------------------------------------------------------------------- if (LOG_LV_DEBUG == Logger::getLogLevel(LOG_CAT_L7VSD_SESSION)){ @@ -94,7 +95,8 @@ namespace l7vs{ bool tcp_socket::close(boost::system::error_code& ec){ Logger logger( LOG_CAT_L7VSD_SESSION, 9999, "tcp_socket::close", __FILE__, __LINE__ ); - boost::mutex::scoped_lock scope_lock(socket_mutex); + boost::mutex::scoped_lock lk1(write_mutex); + boost::mutex::scoped_lock lk2(read_mutex); //----Debug log---------------------------------------------------------------------- if (LOG_LV_DEBUG == Logger::getLogLevel(LOG_CAT_L7VSD_SESSION)){ if(open_flag){ @@ -138,7 +140,7 @@ namespace l7vs{ boost::system::error_code& ec){ Logger logger( LOG_CAT_L7VSD_SESSION, 9999, "tcp_socket::write_some", __FILE__, __LINE__ ); - boost::mutex::scoped_lock scope_lock(socket_mutex); + boost::mutex::scoped_lock lk(write_mutex); std::size_t res_size = 0; res_size = my_socket.write_some(buffers,ec); if(ec){ @@ -158,8 +160,8 @@ namespace l7vs{ std::size_t tcp_socket::read_some(boost::asio::mutable_buffers_1 buffers, boost::system::error_code& ec){ Logger logger( LOG_CAT_L7VSD_SESSION, 9999, "tcp_socket::read_some", __FILE__, __LINE__ ); - - boost::mutex::scoped_lock scope_lock(socket_mutex); + + boost::mutex::scoped_lock lk(read_mutex); std::size_t res_size = 0; res_size = my_socket.read_some(buffers,ec); if(ec){ diff --git a/src/virtualservice_tcp.cpp b/src/virtualservice_tcp.cpp index 7ccd4625..a237c37c 100644 --- a/src/virtualservice_tcp.cpp +++ b/src/virtualservice_tcp.cpp @@ -287,14 +287,14 @@ void l7vs::virtualservice_tcp::handle_accept( const l7vs::virtualservice_tcp::se while(1){ if( ( l7vs::session_thread_control::WAIT == in_session->get_upthread_status() ) && ( l7vs::session_thread_control::WAIT == in_session->get_downthread_status() ) ){ - usleep( 10 ); + usleep( 5 ); break; } } //switch status runing, session_thread_control in_session->startupstream(); in_session->startdownstream(); - + //switch active a session boost::thread::id t_id; session_thread_control_ptr stc_ptr; @@ -335,20 +335,19 @@ void l7vs::virtualservice_tcp::handle_accept( const l7vs::virtualservice_tcp::se boost::format fmt1( "active session thread id = %d" ); fmt1 % t_id; l7vs::Logger::putLogDebug( l7vs::LOG_CAT_L7VSD_VIRTUALSERVICE, 0, fmt1.str(), __FILE__, __LINE__ ); - } - if( LOG_LV_DEBUG == l7vs::Logger::getLogLevel( l7vs::LOG_CAT_L7VSD_VIRTUALSERVICE ) ){ - boost::format fmt1( "pool_session.size = %d" ); - fmt1 % pool_sessions.size(); - l7vs::Logger::putLogDebug( l7vs::LOG_CAT_L7VSD_VIRTUALSERVICE, 0, fmt1.str(), __FILE__, __LINE__ ); - boost::format fmt2( "active_session.size = %d" ); - fmt2 % active_sessions.size(); + boost::format fmt2( "pool_session.size = %d" ); + fmt2 % pool_sessions.size(); l7vs::Logger::putLogDebug( l7vs::LOG_CAT_L7VSD_VIRTUALSERVICE, 0, fmt2.str(), __FILE__, __LINE__ ); - boost::format fmt3( "sorry_session.size = %d" ); - fmt3 % sorry_sessions.size(); + boost::format fmt3( "active_session.size = %d" ); + fmt3 % active_sessions.size(); l7vs::Logger::putLogDebug( l7vs::LOG_CAT_L7VSD_VIRTUALSERVICE, 0, fmt3.str(), __FILE__, __LINE__ ); + boost::format fmt4( "sorry_session.size = %d" ); + fmt4 % sorry_sessions.size(); + l7vs::Logger::putLogDebug( l7vs::LOG_CAT_L7VSD_VIRTUALSERVICE, 0, fmt4.str(), __FILE__, __LINE__ ); + } + if( LOG_LV_DEBUG == l7vs::Logger::getLogLevel( l7vs::LOG_CAT_L7VSD_VIRTUALSERVICE ) ){ } } - //regist accept event handler acceptor_.async_accept( stc_ptr->get_session()->get_client_socket(), boost::bind( &l7vs::virtualservice_tcp::handle_accept, this, stc_ptr, -- 2.11.0