diff options
Diffstat (limited to '')
-rwxr-xr-x[-rw-r--r--] | OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index b9ac155..14e21a2 100644..100755 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | 2 | * Copyright (c) Contributors, http://opensimulator.org/ |
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | 3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
4 | * | 4 | * |
@@ -230,25 +230,25 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
230 | PollServiceHttpRequest req; | 230 | PollServiceHttpRequest req; |
231 | while (m_running) | 231 | while (m_running) |
232 | { | 232 | { |
233 | req = null; | 233 | try |
234 | if(!m_requests.TryTake(out req, 4500) || req == null) | ||
235 | { | 234 | { |
236 | Watchdog.UpdateThread(); | 235 | req = null; |
237 | continue; | 236 | if (!m_requests.TryTake(out req, 4500) || req == null) |
238 | } | 237 | { |
238 | Watchdog.UpdateThread(); | ||
239 | continue; | ||
240 | } | ||
239 | 241 | ||
240 | Watchdog.UpdateThread(); | 242 | Watchdog.UpdateThread(); |
241 | 243 | ||
242 | try | 244 | if (!req.HttpContext.CanSend()) |
243 | { | ||
244 | if(!req.HttpContext.CanSend()) | ||
245 | { | 245 | { |
246 | req.PollServiceArgs.Drop(req.RequestID, req.PollServiceArgs.Id); | 246 | req.PollServiceArgs.Drop(req.RequestID, req.PollServiceArgs.Id); |
247 | byContextDequeue(req); | 247 | byContextDequeue(req); |
248 | continue; | 248 | continue; |
249 | } | 249 | } |
250 | 250 | ||
251 | if(req.HttpContext.IsSending()) | 251 | if (req.HttpContext.IsSending()) |
252 | { | 252 | { |
253 | if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) | 253 | if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) |
254 | { | 254 | { |
@@ -256,7 +256,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
256 | byContextDequeue(req); | 256 | byContextDequeue(req); |
257 | } | 257 | } |
258 | else | 258 | else |
259 | ReQueueEvent(req); | 259 | ReQueueEvent(req); |
260 | continue; | 260 | continue; |
261 | } | 261 | } |
262 | 262 | ||
@@ -290,7 +290,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
290 | { | 290 | { |
291 | nreq.DoHTTPGruntWork(nreq.PollServiceArgs.NoEvents(nreq.RequestID, nreq.PollServiceArgs.Id)); | 291 | nreq.DoHTTPGruntWork(nreq.PollServiceArgs.NoEvents(nreq.RequestID, nreq.PollServiceArgs.Id)); |
292 | } | 292 | } |
293 | catch (ObjectDisposedException) {} | 293 | catch (ObjectDisposedException) { } |
294 | finally | 294 | finally |
295 | { | 295 | { |
296 | byContextDequeue(nreq); | 296 | byContextDequeue(nreq); |
@@ -305,6 +305,12 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
305 | } | 305 | } |
306 | } | 306 | } |
307 | } | 307 | } |
308 | catch (ThreadAbortException) | ||
309 | { | ||
310 | Thread.ResetAbort(); | ||
311 | // Shouldn't set this to 'false', the normal shutdown should cause things to exit | ||
312 | // m_running = false; | ||
313 | } | ||
308 | catch (Exception e) | 314 | catch (Exception e) |
309 | { | 315 | { |
310 | m_log.ErrorFormat("Exception in poll service thread: " + e.ToString()); | 316 | m_log.ErrorFormat("Exception in poll service thread: " + e.ToString()); |