Recently, I switched the WiFi on wince6 and found that the WiFi cannot be started again after it is disabled. The environment is as follows: wince6 r3
WiFi module used: gh381
WiFi driver used: Marvell sdio8688
In junior high school, I found that sdworki. the threadrun () thread of CPP does not respond to the event, but this thread runs normally. It still does not work if it tries to re-open the WiFi power source and reset WiFi module. Later I found it was a problem with the sdio8688 driver. During driver loading, prxparam-> hindicateevent = wlan_create_thread (rxindicatethread, prxparam, rxthpriority). This code segment was commented out, that is to say, if this thread is not set up, it will not cause this problem if it is not released when the driver is detached, but it is released when the WiFi driver is uninstalled, this leads to an endless loop of waiting for the release of the thread, and cannot be opened again after the result is closed .. The function for releasing a thread is in ndis_status deinitrxparam (in pvoid iprxparam)
{
Ndis_status result = ndis_status_success;
Prx_param
Prxparam = (prx_param) iprxparam;
Ndisfreespinlock (& prxparam-> rxqueuespinlock );
Freerxq (prxparam );
/// Pendnode ++
Wlan_destroy_thread (prxparam-> hindicateevent); // This statement is used to release a thread that does not exist.
Deletecriticalsection (& prxparam-> rxcs );
/// Pendnode --
Return result;
} The driver was provided by the provider, and there was no bug ..