diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index 727dbe5..309b71f 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -47,7 +47,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
47 | private readonly BaseHttpServer m_server; | 47 | private readonly BaseHttpServer m_server; |
48 | 48 | ||
49 | private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>(); | 49 | private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>(); |
50 | private static Queue<PollServiceHttpRequest> m_longPollRequests = new Queue<PollServiceHttpRequest>(); | 50 | private static List<PollServiceHttpRequest> m_longPollRequests = new List<PollServiceHttpRequest>(); |
51 | 51 | ||
52 | private uint m_WorkerThreadCount = 0; | 52 | private uint m_WorkerThreadCount = 0; |
53 | private Thread[] m_workerThreads; | 53 | private Thread[] m_workerThreads; |
@@ -116,7 +116,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
116 | if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LongPoll) | 116 | if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LongPoll) |
117 | { | 117 | { |
118 | lock (m_longPollRequests) | 118 | lock (m_longPollRequests) |
119 | m_longPollRequests.Enqueue(req); | 119 | m_longPollRequests.Add(req); |
120 | } | 120 | } |
121 | else | 121 | else |
122 | m_requests.Enqueue(req); | 122 | m_requests.Enqueue(req); |
@@ -139,18 +139,21 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
139 | List<PollServiceHttpRequest> not_ready = new List<PollServiceHttpRequest>(); | 139 | List<PollServiceHttpRequest> not_ready = new List<PollServiceHttpRequest>(); |
140 | lock (m_longPollRequests) | 140 | lock (m_longPollRequests) |
141 | { | 141 | { |
142 | while (m_longPollRequests.Count > 0 && m_running) | 142 | if (m_longPollRequests.Count > 0 && m_running) |
143 | { | 143 | { |
144 | PollServiceHttpRequest req = m_longPollRequests.Dequeue(); | 144 | List<PollServiceHttpRequest> ready = m_longPollRequests.FindAll(req => |
145 | if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id) || // there are events in this EQ | 145 | (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id) || // there are events in this EQ |
146 | (Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) // no events, but timeout | 146 | (Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) // no events, but timeout |
147 | m_requests.Enqueue(req); | 147 | ); |
148 | else | ||
149 | not_ready.Add(req); | ||
150 | } | ||
151 | 148 | ||
152 | foreach (PollServiceHttpRequest req in not_ready) | 149 | ready.ForEach(req => |
153 | m_longPollRequests.Enqueue(req); | 150 | { |
151 | m_log.DebugFormat("[YYY]: --> Enqueuing"); | ||
152 | m_requests.Enqueue(req); | ||
153 | m_longPollRequests.Remove(req); | ||
154 | }); | ||
155 | |||
156 | } | ||
154 | 157 | ||
155 | } | 158 | } |
156 | } | 159 | } |
@@ -169,8 +172,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
169 | 172 | ||
170 | lock (m_longPollRequests) | 173 | lock (m_longPollRequests) |
171 | { | 174 | { |
172 | while (m_longPollRequests.Count > 0 && m_running) | 175 | if (m_longPollRequests.Count > 0 && m_running) |
173 | m_requests.Enqueue(m_longPollRequests.Dequeue()); | 176 | m_longPollRequests.ForEach(req => m_requests.Enqueue(req)); |
174 | } | 177 | } |
175 | 178 | ||
176 | while (m_requests.Count() > 0) | 179 | while (m_requests.Count() > 0) |
@@ -186,6 +189,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
186 | } | 189 | } |
187 | } | 190 | } |
188 | 191 | ||
192 | m_longPollRequests.Clear(); | ||
189 | m_requests.Clear(); | 193 | m_requests.Clear(); |
190 | } | 194 | } |
191 | 195 | ||