diff options
4 files changed, 39 insertions, 16 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs index 2407533..7c92a50 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs | |||
@@ -45,6 +45,13 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
45 | public RequestMethod Request; | 45 | public RequestMethod Request; |
46 | public UUID Id; | 46 | public UUID Id; |
47 | public int TimeOutms; | 47 | public int TimeOutms; |
48 | public EventType Type; | ||
49 | |||
50 | public enum EventType : int | ||
51 | { | ||
52 | Normal = 0, | ||
53 | LslHttp = 1 | ||
54 | } | ||
48 | 55 | ||
49 | public PollServiceEventArgs(RequestMethod pRequest, HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents, UUID pId, int pTimeOutms) | 56 | public PollServiceEventArgs(RequestMethod pRequest, HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents, UUID pId, int pTimeOutms) |
50 | { | 57 | { |
@@ -54,6 +61,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
54 | NoEvents = pNoEvents; | 61 | NoEvents = pNoEvents; |
55 | Id = pId; | 62 | Id = pId; |
56 | TimeOutms = pTimeOutms; | 63 | TimeOutms = pTimeOutms; |
64 | Type = EventType.Normal; | ||
57 | } | 65 | } |
58 | } | 66 | } |
59 | } | 67 | } |
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index 45b1375..c7c7c13 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -174,13 +174,15 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
174 | private readonly BaseHttpServer m_server; | 174 | private readonly BaseHttpServer m_server; |
175 | 175 | ||
176 | private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>(); | 176 | private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>(); |
177 | private static Queue<PollServiceHttpRequest> m_retry_requests = new Queue<PollServiceHttpRequest>(); | 177 | private BlockingQueue<PollServiceHttpRequest> m_slowRequests = new BlockingQueue<PollServiceHttpRequest>(); |
178 | private static Queue<PollServiceHttpRequest> m_retryRequests = new Queue<PollServiceHttpRequest>(); | ||
178 | 179 | ||
179 | private uint m_WorkerThreadCount = 0; | 180 | private uint m_WorkerThreadCount = 0; |
180 | private Thread[] m_workerThreads; | 181 | private Thread[] m_workerThreads; |
181 | private Thread m_retrysThread; | 182 | private Thread m_retrysThread; |
182 | 183 | ||
183 | private bool m_running = true; | 184 | private bool m_running = true; |
185 | private int slowCount = 0; | ||
184 | 186 | ||
185 | // private int m_timeout = 1000; // increase timeout 250; now use the event one | 187 | // private int m_timeout = 1000; // increase timeout 250; now use the event one |
186 | 188 | ||
@@ -195,7 +197,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
195 | { | 197 | { |
196 | m_workerThreads[i] | 198 | m_workerThreads[i] |
197 | = Watchdog.StartThread( | 199 | = Watchdog.StartThread( |
198 | poolWorkerJob, | 200 | PoolWorkerJob, |
199 | String.Format("PollServiceWorkerThread{0}", i), | 201 | String.Format("PollServiceWorkerThread{0}", i), |
200 | ThreadPriority.Normal, | 202 | ThreadPriority.Normal, |
201 | false, | 203 | false, |
@@ -217,15 +219,20 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
217 | { | 219 | { |
218 | if (m_running) | 220 | if (m_running) |
219 | { | 221 | { |
220 | lock (m_retry_requests) | 222 | lock (m_retryRequests) |
221 | m_retry_requests.Enqueue(req); | 223 | m_retryRequests.Enqueue(req); |
222 | } | 224 | } |
223 | } | 225 | } |
224 | 226 | ||
225 | public void Enqueue(PollServiceHttpRequest req) | 227 | public void Enqueue(PollServiceHttpRequest req) |
226 | { | 228 | { |
227 | if (m_running) | 229 | if (m_running) |
228 | m_requests.Enqueue(req); | 230 | { |
231 | if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LslHttp) | ||
232 | m_slowRequests.Enqueue(req); | ||
233 | else | ||
234 | m_requests.Enqueue(req); | ||
235 | } | ||
229 | } | 236 | } |
230 | 237 | ||
231 | private void CheckRetries() | 238 | private void CheckRetries() |
@@ -234,10 +241,18 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
234 | { | 241 | { |
235 | Thread.Sleep(100); // let the world move .. back to faster rate | 242 | Thread.Sleep(100); // let the world move .. back to faster rate |
236 | Watchdog.UpdateThread(); | 243 | Watchdog.UpdateThread(); |
237 | lock (m_retry_requests) | 244 | lock (m_retryRequests) |
238 | { | 245 | { |
239 | while (m_retry_requests.Count > 0 && m_running) | 246 | while (m_retryRequests.Count > 0 && m_running) |
240 | Enqueue(m_retry_requests.Dequeue()); | 247 | m_requests.Enqueue(m_retryRequests.Dequeue()); |
248 | } | ||
249 | slowCount++; | ||
250 | if (slowCount >= 10) | ||
251 | { | ||
252 | slowCount = 0; | ||
253 | |||
254 | while (m_slowRequests.Count() > 0 && m_running) | ||
255 | m_requests.Enqueue(m_retryRequests.Dequeue()); | ||
241 | } | 256 | } |
242 | } | 257 | } |
243 | } | 258 | } |
@@ -261,7 +276,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
261 | 276 | ||
262 | try | 277 | try |
263 | { | 278 | { |
264 | foreach (PollServiceHttpRequest req in m_retry_requests) | 279 | foreach (PollServiceHttpRequest req in m_retryRequests) |
265 | { | 280 | { |
266 | m_server.DoHTTPGruntWork( | 281 | m_server.DoHTTPGruntWork( |
267 | req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id), | 282 | req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id), |
@@ -273,7 +288,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
273 | } | 288 | } |
274 | 289 | ||
275 | PollServiceHttpRequest wreq; | 290 | PollServiceHttpRequest wreq; |
276 | m_retry_requests.Clear(); | 291 | m_retryRequests.Clear(); |
277 | 292 | ||
278 | while (m_requests.Count() > 0) | 293 | while (m_requests.Count() > 0) |
279 | { | 294 | { |
@@ -294,7 +309,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
294 | 309 | ||
295 | // work threads | 310 | // work threads |
296 | 311 | ||
297 | private void poolWorkerJob() | 312 | private void PoolWorkerJob() |
298 | { | 313 | { |
299 | PollServiceHttpRequest req; | 314 | PollServiceHttpRequest req; |
300 | StreamReader str; | 315 | StreamReader str; |
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs index e93266c..9c5596b 100644 --- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs | |||
@@ -172,9 +172,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
172 | 172 | ||
173 | string uri = "/lslhttp/" + urlcode.ToString(); | 173 | string uri = "/lslhttp/" + urlcode.ToString(); |
174 | 174 | ||
175 | m_HttpServer.AddPollServiceHTTPHandler( | 175 | PollServiceEventArgs args = new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode, 25000); |
176 | uri, | 176 | args.Type = PollServiceEventArgs.EventType.LslHttp; |
177 | new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode,25000)); | 177 | m_HttpServer.AddPollServiceHTTPHandler(uri, args); |
178 | 178 | ||
179 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url }); | 179 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url }); |
180 | } | 180 | } |
@@ -422,7 +422,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
422 | } | 422 | } |
423 | private Hashtable GetEvents(UUID requestID, UUID sessionID, string request) | 423 | private Hashtable GetEvents(UUID requestID, UUID sessionID, string request) |
424 | { | 424 | { |
425 | UrlData url = null; | 425 | UrlData url = null; |
426 | RequestData requestData = null; | 426 | RequestData requestData = null; |
427 | 427 | ||
428 | lock (m_RequestMap) | 428 | lock (m_RequestMap) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index fd8e586..5808594 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -7479,7 +7479,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7479 | public LSL_String llSHA1String(string src) | 7479 | public LSL_String llSHA1String(string src) |
7480 | { | 7480 | { |
7481 | m_host.AddScriptLPS(1); | 7481 | m_host.AddScriptLPS(1); |
7482 | return Util.SHA1Hash(src, Encoding.UTF8).ToUpper(); | 7482 | return Util.SHA1Hash(src, Encoding.UTF8).ToLower(); |
7483 | } | 7483 | } |
7484 | 7484 | ||
7485 | protected ObjectShapePacket.ObjectDataBlock SetPrimitiveBlockShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, byte profileshape, byte pathcurve) | 7485 | protected ObjectShapePacket.ObjectDataBlock SetPrimitiveBlockShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, byte profileshape, byte pathcurve) |