rem: var http = this.getXmlhttpObject(); 
add:     if(!async_cb){ this._blockAsync = true; } 
context: dojo.hostenv.getText = function(uri, async_cb, fail_ok){	// need to block async callbacks from snatching this thread as the result	// of an async callback might call another sync XHR, this hangs khtml forever	// hostenv._blockAsync must also be checked in BrowserIO's watchInFlight()	// NOTE: must be declared before scope switches ie. this.getXmlhttpObject()	if(!async_cb){ this._blockAsync = true; }	var http = this.getXmlhttpObject();	function isDocumentOk(http){		var stat = http["status"];		// allow a 304 use cache, needed in konq (is this compliant with the http spec?)		return Boolean((!stat)||((200 <= stat)&&(300 > stat))||(stat==304));	}	if(async_cb){		var _this = this, timer = null, gbl = dojo.global();		var xhr = dojo.evalObjPath("dojo.io.XMLHTTPTransport");		http.onreadystatechange = function(){			if(timer){ gbl.clearTimeout(timer); timer = null; }			if(_this._blockAsync || (xhr && xhr._blockAsync)){				timer = gbl.setTimeout(function () { http.onreadystatechange.apply(this); }, 10);			}else{				if(4==http.readyState){					if(isDocumentOk(http)){						// dojo.debug("LOADED URI: "+uri);						async_cb(http.responseText);					}				}			}		}	}	http.open('GET', uri, async_cb ? true : false);	try{		http.send(null);		if(async_cb){			return null;		}		if(!isDocumentOk(http)){			var err = Error("Unable to load "+uri+" status:"+ http.status);			err.status = http.status;			err.responseText = http.responseText;			throw err;		}	}catch(e){		this._blockAsync = false;		if((fail_ok)&&(!async_cb)){			return null;		}else{			throw e;		}	}	this._blockAsync = false;	return http.responseText;}
meta: 4707	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/4707/50c3492c4c3c825dbd3401e134a19ed46799c456/dojo.js.uncompressed.js/buggy/www/resources/dojo-ajax/dojo.js.uncompressed.js