*** old/if_run.c	2010-03-05 05:46:34.000000000 -0700
--- new/if_run.c	2010-03-05 05:48:07.000000000 -0700
***************
*** 787,793 ****
  
! 	if (ifp && ifp->if_flags & IFF_UP){
! 		RUN_LOCK(sc);
! 		run_stop(sc);
! 		RUN_UNLOCK(sc);
! 	}
  
--- 787,797 ----
  
! 	RUN_LOCK(sc);
! 	sc->sc_rvp->amrr_run = RUN_AMRR_OFF;
! 	RUN_UNLOCK(sc);
! 
! 	/* drain them all */
! 	usb_callout_drain(&sc->sc_rvp->amrr_ch);
! 	ieee80211_draintask(ic, &sc->sc_rvp->amrr_task);
! 	ieee80211_draintask(ic, &sc->wme_task);
! 	ieee80211_draintask(ic, &sc->usb_timeout_task);
  
***************
*** 4236,4238 ****
  	struct ieee80211com *ic = ifp->if_l2com;
- 	struct ieee80211vap *vap = &sc->sc_rvp->vap;
  	uint32_t tmp;
--- 4240,4241 ----
***************
*** 4393,4395 ****
  	/* select default channel */
- 	vap->iv_bss->ni_chan = ic->ic_curchan;	/* ic_bsschan?? */
  	run_set_chan(sc, ic->ic_curchan);
--- 4396,4397 ----
***************
*** 4446,4449 ****
  
! 	if (ic->ic_flags & IEEE80211_F_SCAN)
! 		ieee80211_cancel_scan(&sc->sc_rvp->vap);
  
--- 4448,4454 ----
  
! 	if(sc->sc_rvp != NULL){
! 		sc->sc_rvp->amrr_run = RUN_AMRR_OFF;
! 		if (ic->ic_flags & IEEE80211_F_SCAN)
! 			ieee80211_cancel_scan(&sc->sc_rvp->vap);
! 	}
  
***************
*** 4454,4466 ****
  
- 	sc->sc_rvp->amrr_run = RUN_AMRR_OFF;
- 
  	RUN_UNLOCK(sc);
  
- 	/* drain them all */
- 	usb_callout_drain(&sc->sc_rvp->amrr_ch);
- 	ieee80211_draintask(ic, &sc->sc_rvp->amrr_task);
- 	ieee80211_draintask(ic, &sc->wme_task);
  	for(i = 0; i < RUN_N_XFER; i++)
  		usbd_transfer_drain(sc->sc_xfer[i]);
- 	ieee80211_draintask(ic, &sc->usb_timeout_task);
  
--- 4459,4464 ----
