Javascript: xmlhttprequest atascado aleatoriamente en Ready State 1

He estado trabajando en un gadget de Windows (lo que significa que el "navegador" es Internet Explorer) que consulta direcciones de subred específicas para obtener información. Ahora, a veces lo hace a un ritmo relativamente rápido (aproximadamente cada 5 segundos) y funciona lo suficientemente bien. Sin embargo, a veces se quedará atascado en el estado listo 1 y permanecerá allí para siempre. Siempre que el gadget intente rehacer la función para obtener la solicitud xmlhtt y obtener información de ella, permanecerá en el estado 1. Esto se puede replicar fácilmente al abrir varias instancias del gadget y luego cerrar todas menos una. En ese punto, el que todavía está abierto casi siempre se quedará atascado en este estado. Siento que podría tener algo que ver con que todos accedan al mismo sitio web, o tal vez solo tenga que ver con que las solicitudes xmlhtt se detengan a mitad de la transmisión y que eviten que otro funcione. A continuación se muestra el código relevante.

//Reference to this for the inner function
var me = this;
var request = new XMLHttpRequest();
request.onreadystatechange = onReadyStateChange;
var url = this.url;
//Make the URL random to prevent being cached
url += ("&a=" + ((new Date()).getTime()));
Trace(DEBUG_COMM, "Sase.updateStatus url: " + url);
request.open("GET", url, true);
request.send();   // fire off the request, calls httpRequestReadyStateChange as things continue
Trace(DEBUG_COMM, "Request sent" + request.readyState); 
function onReadyStateChange() {Trace(DEBUG_COMM, "Sase.httpRequestReadyStateChange: state=" + request.readyState);
    if (4 == request.readyState) {
        Trace(DEBUG_COMM, "Sase.httpRequestReadyStateChange: status=" + request.status);

        if (request.status == 200) {
            Trace(DEBUG_COMM, "retrieved html: " + request.responseText);
            var results = request.responseText;
            var resultsString = request.responseText.toString();
            Trace(DEBUG_COMM, "results String: " + resultsString);
            me.ParseStatusData(resultsString);
        }
        else {
            //me.commError(request.status);
        }

        request = null;
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta