|
|
@@ -179,6 +179,8 @@ namespace System.Web {
|
|
|
context.Response.FinalFlush ();
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * This is not being used. OnFirstRequestEnd is empty.
|
|
|
if (!_firstRequestExecuted) {
|
|
|
lock (this) {
|
|
|
if (!_firstRequestExecuted) {
|
|
|
@@ -187,6 +189,7 @@ namespace System.Web {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ */
|
|
|
|
|
|
Interlocked.Decrement(ref _activeRequests);
|
|
|
|
|
|
@@ -231,6 +234,7 @@ namespace System.Web {
|
|
|
HttpContext context = new HttpContext (wr);
|
|
|
HttpException exception = new HttpException (503, "Service unavailable");
|
|
|
Interlocked.Increment (ref _runtime._activeRequests);
|
|
|
+ context.Response.InitializeWriter ();
|
|
|
_runtime.FinishRequest (context, exception);
|
|
|
}
|
|
|
|
|
|
@@ -276,7 +280,7 @@ namespace System.Web {
|
|
|
_firstRequestStartTime = DateTime.Now;
|
|
|
OnFirstRequestStart(context);
|
|
|
_firstRequestStarted = true;
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -311,38 +315,32 @@ namespace System.Web {
|
|
|
void TryExecuteQueuedRequests ()
|
|
|
{
|
|
|
// Wait for pending jobs to start
|
|
|
- if (Interlocked.CompareExchange (ref pendingCallbacks, 3, 3) == 3) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (queueManager == null)
|
|
|
- return;
|
|
|
-
|
|
|
- if (!queueManager.CanExecuteRequest (false)) {
|
|
|
+ if (Interlocked.CompareExchange (ref pendingCallbacks, 3, 3) == 3)
|
|
|
return;
|
|
|
- }
|
|
|
|
|
|
- HttpWorkerRequest wr = queueManager.Dequeue ();
|
|
|
- if (wr == null) {
|
|
|
+ HttpWorkerRequest wr = queueManager.GetNextRequest (null);
|
|
|
+ if (wr == null)
|
|
|
return;
|
|
|
- }
|
|
|
|
|
|
Interlocked.Increment (ref pendingCallbacks);
|
|
|
ThreadPool.QueueUserWorkItem (doRequestCallback, wr);
|
|
|
TryExecuteQueuedRequests ();
|
|
|
}
|
|
|
|
|
|
- public static void ProcessRequest (HttpWorkerRequest Request)
|
|
|
+ public static void ProcessRequest (HttpWorkerRequest request)
|
|
|
{
|
|
|
- if (Request == null)
|
|
|
- throw new ArgumentNullException ("Request");
|
|
|
+ if (request == null)
|
|
|
+ throw new ArgumentNullException ("request");
|
|
|
|
|
|
QueueManager mgr = _runtime.queueManager;
|
|
|
- if (!_runtime._firstRequestExecuted || mgr == null || mgr.CanExecuteRequest (false)) {
|
|
|
- _runtime.InternalExecuteRequest (Request);
|
|
|
- } else {
|
|
|
- _runtime.queueManager.Queue (Request);
|
|
|
+ if (_runtime._firstRequestStarted && mgr != null) {
|
|
|
+ request = mgr.GetNextRequest (request);
|
|
|
+ // We're busy, return immediately
|
|
|
+ if (request == null)
|
|
|
+ return;
|
|
|
}
|
|
|
+
|
|
|
+ _runtime.InternalExecuteRequest (request);
|
|
|
}
|
|
|
|
|
|
#if NET_1_1
|