From 9a8de52940ea6d9ce430d8d51094a353eca7d3c5 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 26 Jun 2012 10:49:37 +0200
Subject: Add an event to the poll service manager thread to allow starting it
 when needed rather than once per second. That is just too slow!

---
 .../Framework/Servers/HttpServer/PollServiceRequestManager.cs |  7 +++++--
 .../Framework/Servers/HttpServer/PollServiceWorkerThread.cs   | 11 +++++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
index 0062d4e..c3e1a79 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
@@ -41,6 +41,7 @@ namespace OpenSim.Framework.Servers.HttpServer
 
         private readonly BaseHttpServer m_server;
         private static Queue m_requests = Queue.Synchronized(new Queue());
+        private static ManualResetEvent m_ev = new ManualResetEvent(false);
         private uint m_WorkerThreadCount = 0;
         private Thread[] m_workerThreads;
         private PollServiceWorkerThread[] m_PollServiceWorkerThreads;
@@ -88,15 +89,17 @@ namespace OpenSim.Framework.Servers.HttpServer
         {
             lock (m_requests)
                 m_requests.Enqueue(req);
+            m_ev.Set();
         }
 
         public void ThreadStart()
         {
             while (m_running)
             {
+                m_ev.WaitOne(1000);
+                m_ev.Reset();
                 Watchdog.UpdateThread();
                 ProcessQueuedRequests();
-                Thread.Sleep(1000);
             }
         }
 
@@ -152,4 +155,4 @@ namespace OpenSim.Framework.Servers.HttpServer
             m_running = false;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs
index 5e171f0..b39185f 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs
@@ -89,9 +89,16 @@ namespace OpenSim.Framework.Servers.HttpServer
                             continue;
                         }
 
-                        Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd());
-                        m_server.DoHTTPGruntWork(responsedata,
+                        try
+                        {
+                            Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd());
+                            m_server.DoHTTPGruntWork(responsedata,
                                                  new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request),req.HttpContext));
+                        }
+                        catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
+                        {
+                            // Ignore it, no need to reply
+                        }
                     }
                     else
                     {
-- 
cgit v1.1