• R/O
  • HTTP
  • SSH
  • HTTPS

ultramonkey-l7-mod-url: Commit

Protocol Moudule URL for UltraMonkey-L7 V3(This is add on Module)


Commit MetaInfo

Revisión55c2ca61f5e5e9056e132bed69a0f05880938521 (tree)
Tiempo2013-07-21 16:08:31
Autorroot <root@kyou...>
Commiterroot

Log Message

Fixed rslist_it_list and rslist_it_list_it data race bug.

Cambiar Resumen

Diferencia incremental

--- a/protocol/protocol_module_url.cpp
+++ b/protocol/protocol_module_url.cpp
@@ -2597,6 +2597,7 @@ protocol_module_base::EVENT_TAG protocol_module_url::handle_realserver_select(
25972597 // check endpoint ( set by '-RS/--end-point' option and exist Real Server )
25982598 for( rs_list_itr = rs_list_begin(); rs_list_itr != rs_list_end(); rs_list_itr = rs_list_next( rs_list_itr ) ){
25992599 if ( *ep_list_it == rs_list_itr->tcp_endpoint && rs_list_itr->weight != 0 ) {
2600+ rw_scoped_lock inc_lock(rslist_it_list_ref_count_inc_mutex);
26002601 rslist_it_list.push_back( rs_list_itr );
26012602 is_realserver_match = true;
26022603 break;
@@ -2605,12 +2606,14 @@ protocol_module_base::EVENT_TAG protocol_module_url::handle_realserver_select(
26052606 ++ep_list_it;
26062607 }
26072608 if( is_realserver_match ){
2609+ rw_scoped_lock inc_lock(rslist_it_list_ref_count_inc_mutex);
26082610 // "rs_list_end()" is rslist_it_list's sentinel
26092611 rslist_it_list.push_back( rs_list_end() );
26102612 // call Schedule Module in this function.
26112613 useScheduleTCP( thread_id, rslist_it_list, rs_endpoint );
26122614 }
26132615 }
2616+ rw_scoped_lock inc_lock(rslist_it_list_ref_count_inc_mutex);
26142617 rslist_it_list.clear();
26152618 }
26162619
--- a/protocol/protocol_module_url.h
+++ b/protocol/protocol_module_url.h
@@ -150,6 +150,9 @@ private:
150150
151151 // for use 'schedule_tcp' function
152152 std::list< std::list< realserver>::iterator > rslist_it_list;
153+ unsigned int rslist_it_list_ref_count;
154+ wr_mutex rslist_it_list_ref_count_inc_mutex;
155+
153156 std::list< std::list< realserver>::iterator >::iterator rslist_it_list_it;
154157 std::list< realserver >::iterator begin_rslist_it();
155158 std::list< realserver >::iterator end_rslist_it();
Show on old repository browser