wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_roam_update_ts.cpp
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_roam_update_ts.cpp Tue May 11 17:54:03 2010 +0300
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_roam_update_ts.cpp Tue May 25 14:40:09 2010 +0300
@@ -16,7 +16,7 @@
*/
/*
-* %version: 12 %
+* %version: 13 %
*/
#include "core_sub_operation_roam_update_ts.h"
@@ -154,14 +154,25 @@
core_virtual_traffic_stream_c* virtual_iter = virtual_ts_iter.first();
while( virtual_iter )
{
- if( is_ac_required[virtual_iter->access_class()] &&
- virtual_iter->status() != core_traffic_stream_status_active )
+ if( virtual_iter->status() != core_traffic_stream_status_active )
{
- DEBUG1( "core_sub_operation_roam_update_ts_c::next_state() - virtual traffic stream with ID %u needs to created",
- virtual_iter->id() );
+ if( is_ac_required[virtual_iter->access_class()] )
+ {
+ DEBUG1( "core_sub_operation_roam_update_ts_c::next_state() - virtual traffic stream with ID %u needs to created",
+ virtual_iter->id() );
- virtual_stream_list_m.add_traffic_stream(
- *virtual_iter );
+ virtual_stream_list_m.add_traffic_stream(
+ *virtual_iter );
+ }
+ else
+ {
+ /**
+ * Send a status update to all affected virtual traffic streams.
+ */
+ set_virtual_traffic_stream_inactive_by_id(
+ virtual_iter->id(),
+ core_traffic_stream_status_inactive_not_required );
+ }
}
virtual_iter = virtual_ts_iter.next();
@@ -188,7 +199,7 @@
*/
set_virtual_traffic_stream_inactive_by_tid(
iter->tid(),
- core_traffic_stream_status_inactive_not_required );
+ core_traffic_stream_status_inactive_not_required );
/**
* Delete the actual traffic stream.
@@ -196,6 +207,7 @@
server_m->get_wpx_adaptation_instance().handle_ts_delete(
iter->tid(), iter->user_priority() );
ts_iter.remove();
+ iter = NULL;
}
else if( iter->status() == core_traffic_stream_status_undefined )
{
@@ -222,6 +234,7 @@
server_m->get_wpx_adaptation_instance().handle_ts_delete(
iter->tid(), iter->user_priority() );
ts_iter.remove();
+ iter = NULL;
}
iter = ts_iter.next();
@@ -301,6 +314,7 @@
* Move to the next entry.
*/
stream_iter_m.remove();
+ iter = NULL;
(void)stream_iter_m.first();
return goto_state( core_state_recreate_next );
@@ -439,7 +453,9 @@
* Move to the next entry.
*/
stream_iter_m.remove();
+ iter = NULL;
virtual_stream_iter_m.remove();
+ virtual_iter = NULL;
(void)virtual_stream_iter_m.first();
return goto_state( core_state_recreate_virtual_next );