OSDN Git Service

#325 tcp_socketのロック箇所を見直し。
authorokada <okada@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Tue, 3 Mar 2009 09:41:25 +0000 (09:41 +0000)
committerokada <okada@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Tue, 3 Mar 2009 09:41:25 +0000 (09:41 +0000)
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
src/tcp_session.cpp
src/tcp_socket.cpp
src/virtualservice_tcp.cpp

index 0bfacff..90d920c 100644 (file)
@@ -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;
 
index 3744ae4..2849e77 100644 (file)
@@ -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;
index 1d4be38..e7e050a 100644 (file)
@@ -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){
index 7ccd462..a237c37 100644 (file)
@@ -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,