From e6272b8d56dd7856faf374e7ac29460b4e74f1bb Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 7 Dec 2011 12:28:42 +0000 Subject: Stop also adding an ordinary http handler when we set up a poll http handler. It appears that this is entirely unnecessary since the poll http handlers are dealt with on a separate code path. --- OpenSim/Framework/Console/RemoteConsole.cs | 10 ++-------- OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 12 +++--------- .../Servers/HttpServer/Interfaces/IHttpServer.cs | 4 ++-- .../Linden/Caps/EventQueue/EventQueueGetModule.cs | 6 ------ .../Region/CoreModules/Scripting/LSLHttp/UrlModule.cs | 17 ++++++----------- 5 files changed, 13 insertions(+), 36 deletions(-) diff --git a/OpenSim/Framework/Console/RemoteConsole.cs b/OpenSim/Framework/Console/RemoteConsole.cs index 07de27a..eabb62d 100644 --- a/OpenSim/Framework/Console/RemoteConsole.cs +++ b/OpenSim/Framework/Console/RemoteConsole.cs @@ -232,9 +232,8 @@ namespace OpenSim.Framework.Console string uri = "/ReadResponses/" + sessionID.ToString() + "/"; - m_Server.AddPollServiceHTTPHandler(uri, HandleHttpPoll, - new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, - sessionID)); + m_Server.AddPollServiceHTTPHandler( + uri, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, sessionID)); XmlDocument xmldoc = new XmlDocument(); XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, @@ -266,11 +265,6 @@ namespace OpenSim.Framework.Console return reply; } - private Hashtable HandleHttpPoll(Hashtable request) - { - return new Hashtable(); - } - private Hashtable HandleHttpCloseSession(Hashtable request) { DoExpire(); diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 6bffba5..a8ece79 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs @@ -227,21 +227,17 @@ namespace OpenSim.Framework.Servers.HttpServer return new List(m_HTTPHandlers.Keys); } - public bool AddPollServiceHTTPHandler(string methodName, GenericHTTPMethod handler, PollServiceEventArgs args) + public bool AddPollServiceHTTPHandler(string methodName, PollServiceEventArgs args) { - bool pollHandlerResult = false; lock (m_pollHandlers) { if (!m_pollHandlers.ContainsKey(methodName)) { - m_pollHandlers.Add(methodName,args); - pollHandlerResult = true; + m_pollHandlers.Add(methodName, args); + return true; } } - if (pollHandlerResult) - return AddHTTPHandler(methodName, handler); - return false; } @@ -1848,8 +1844,6 @@ namespace OpenSim.Framework.Servers.HttpServer { lock (m_pollHandlers) m_pollHandlers.Remove(path); - - RemoveHTTPHandler(httpMethod, path); } public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler) diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs index fd77984..db58f6f 100644 --- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs @@ -77,8 +77,8 @@ namespace OpenSim.Framework.Servers.HttpServer /// true if the handler was successfully registered, false if a handler with the same name already existed. /// bool AddHTTPHandler(string methodName, GenericHTTPMethod handler); - - bool AddPollServiceHTTPHandler(string methodName, GenericHTTPMethod handler, PollServiceEventArgs args); + + bool AddPollServiceHTTPHandler(string methodName, PollServiceEventArgs args); /// /// Adds a LLSD handler, yay. diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index 9f27abc..8ba6f61 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs @@ -361,7 +361,6 @@ namespace OpenSim.Region.ClientStack.Linden // This will persist this beyond the expiry of the caps handlers MainServer.Instance.AddPollServiceHTTPHandler( capsBase + EventQueueGetUUID.ToString() + "/", - EventQueuePoll, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID)); Random rnd = new Random(Environment.TickCount); @@ -578,11 +577,6 @@ namespace OpenSim.Region.ClientStack.Linden // return responsedata; // } - public Hashtable EventQueuePoll(Hashtable request) - { - return new Hashtable(); - } - // public Hashtable EventQueuePath2(Hashtable request) // { // string capuuid = (string)request["uri"]; //path.Replace("/CAPS/EQG/",""); diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs index 7377ceb..67d99e0 100644 --- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs @@ -90,11 +90,6 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp get { return null; } } - private Hashtable HandleHttpPoll(Hashtable request) - { - return new Hashtable(); - } - public string Name { get { return "UrlModule"; } @@ -171,9 +166,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp string uri = "/lslhttp/" + urlcode.ToString() + "/"; - m_HttpServer.AddPollServiceHTTPHandler(uri,HandleHttpPoll, - new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents, - urlcode)); + m_HttpServer.AddPollServiceHTTPHandler( + uri, + new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode)); engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url }); } @@ -213,9 +208,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp string uri = "/lslhttps/" + urlcode.ToString() + "/"; - m_HttpsServer.AddPollServiceHTTPHandler(uri,HandleHttpPoll, - new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents, - urlcode)); + m_HttpsServer.AddPollServiceHTTPHandler( + uri, + new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode)); engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url }); } -- cgit v1.1 From a8ed185c00c3c688ae939104cc0cc752a430c168 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 7 Dec 2011 14:55:01 +0000 Subject: properly lock CapsHandlers.m_capsHandlers --- OpenSim/Capabilities/CapsHandlers.cs | 66 ++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/OpenSim/Capabilities/CapsHandlers.cs b/OpenSim/Capabilities/CapsHandlers.cs index a0e9ebc..1709f46 100644 --- a/OpenSim/Capabilities/CapsHandlers.cs +++ b/OpenSim/Capabilities/CapsHandlers.cs @@ -51,11 +51,10 @@ namespace OpenSim.Framework.Capabilities /// supplied BaseHttpServer. /// /// base HTTP server - /// host name of the HTTP - /// server + /// host name of the HTTP server /// HTTP port public CapsHandlers(BaseHttpServer httpListener, string httpListenerHostname, uint httpListenerPort) - : this (httpListener,httpListenerHostname,httpListenerPort, false) + : this(httpListener,httpListenerHostname,httpListenerPort, false) { } @@ -88,44 +87,52 @@ namespace OpenSim.Framework.Capabilities /// handler to be removed public void Remove(string capsName) { - m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[capsName].Path); - m_httpListener.RemoveStreamHandler("GET", m_capsHandlers[capsName].Path); - m_capsHandlers.Remove(capsName); + lock (m_capsHandlers) + { + m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[capsName].Path); + m_httpListener.RemoveStreamHandler("GET", m_capsHandlers[capsName].Path); + m_capsHandlers.Remove(capsName); + } } public bool ContainsCap(string cap) { - return m_capsHandlers.ContainsKey(cap); + lock (m_capsHandlers) + return m_capsHandlers.ContainsKey(cap); } /// /// The indexer allows us to treat the CapsHandlers object /// in an intuitive dictionary like way. /// - /// + /// /// The indexer will throw an exception when you try to /// retrieve a cap handler for a cap that is not contained in /// CapsHandlers. - /// + /// public IRequestHandler this[string idx] { get { - return m_capsHandlers[idx]; + lock (m_capsHandlers) + return m_capsHandlers[idx]; } set { - if (m_capsHandlers.ContainsKey(idx)) + lock (m_capsHandlers) { - m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[idx].Path); - m_capsHandlers.Remove(idx); + if (m_capsHandlers.ContainsKey(idx)) + { + m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[idx].Path); + m_capsHandlers.Remove(idx); + } + + if (null == value) return; + + m_capsHandlers[idx] = value; + m_httpListener.AddStreamHandler(value); } - - if (null == value) return; - - m_capsHandlers[idx] = value; - m_httpListener.AddStreamHandler(value); } } @@ -137,9 +144,12 @@ namespace OpenSim.Framework.Capabilities { get { - string[] __keys = new string[m_capsHandlers.Keys.Count]; - m_capsHandlers.Keys.CopyTo(__keys, 0); - return __keys; + lock (m_capsHandlers) + { + string[] __keys = new string[m_capsHandlers.Keys.Count]; + m_capsHandlers.Keys.CopyTo(__keys, 0); + return __keys; + } } } @@ -157,15 +167,19 @@ namespace OpenSim.Framework.Capabilities protocol = "https://"; string baseUrl = protocol + m_httpListenerHostName + ":" + m_httpListenerPort.ToString(); - foreach (string capsName in m_capsHandlers.Keys) + + lock (m_capsHandlers) { - if (excludeSeed && "SEED" == capsName) - continue; + foreach (string capsName in m_capsHandlers.Keys) + { + if (excludeSeed && "SEED" == capsName) + continue; - caps[capsName] = baseUrl + m_capsHandlers[capsName].Path; + caps[capsName] = baseUrl + m_capsHandlers[capsName].Path; + } } return caps; } } -} +} \ No newline at end of file -- cgit v1.1