--- prism2_ap.c.orig	Fri Dec 21 10:55:16 2001
+++ prism2_ap.c	Fri Dec 21 10:57:38 2001
@@ -93,29 +93,30 @@
 			sta->buffer_count--;
 		}
 		sta->tx_buf_head = sta->tx_buf_tail = NULL;
 	}
 	list_del(&sta->list);
+	ap->num_sta--;
 	kfree(sta);
 }
 
 static void ap_handle_timer(unsigned long data)
 {
 	local_info_t *local = (local_info_t *) data;
 	struct ap_data *ap;
-	struct list_head *ptr;
+	struct list_head *ptr, *n;
 	unsigned long flags;
 
 	if (local == NULL || local->ap == NULL)
 		return;
 
 	ap = local->ap;
 
 	spin_lock_irqsave(&ap->sta_table_lock, flags);
 
-	for (ptr = ap->sta_list.next; ptr != NULL && ptr != &ap->sta_list;
-	     ptr = ptr->next) {
+	for (ptr = ap->sta_list.next, n = ptr->next; ptr != &ap->sta_list;
+	     ptr = n, n = ptr->next) {
 		unsigned long last;
 		struct sta_info *sta = (struct sta_info *) ptr;
 		if (atomic_read(&sta->users) != 0) {
 			PDEBUG(DEBUG_AP, "ap_handle_timer: STA " MACSTR
 			       " users=%i\n",

