diff options
author | Justin Clark-Casey (justincc) | 2013-01-19 02:04:36 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-02-08 21:25:57 +0000 |
commit | 82268d715e1b1ea6562fa5fb29d43d6e0d7e2c2c (patch) | |
tree | a827eb05fa8eda4d0333bcd6be062763d486174a /OpenSim | |
parent | Mantis 6507 keys returned by llGetAgentList incorrect for llList2Key (diff) | |
download | opensim-SC_OLD-82268d715e1b1ea6562fa5fb29d43d6e0d7e2c2c.zip opensim-SC_OLD-82268d715e1b1ea6562fa5fb29d43d6e0d7e2c2c.tar.gz opensim-SC_OLD-82268d715e1b1ea6562fa5fb29d43d6e0d7e2c2c.tar.bz2 opensim-SC_OLD-82268d715e1b1ea6562fa5fb29d43d6e0d7e2c2c.tar.xz |
Explicitly stop PollServiceRequestManager() rather than relying on its destructor.
Hopes to address occasional shutdown failures from http://opensimulator.org/mantis/view.php?id=6503
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 3 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | 17 |
2 files changed, 15 insertions, 5 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 8a0340f..aa49343 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -1623,6 +1623,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1623 | 1623 | ||
1624 | // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events | 1624 | // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events |
1625 | m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000); | 1625 | m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000); |
1626 | m_PollServiceManager.Start(); | ||
1626 | HTTPDRunning = true; | 1627 | HTTPDRunning = true; |
1627 | 1628 | ||
1628 | //HttpListenerContext context; | 1629 | //HttpListenerContext context; |
@@ -1673,6 +1674,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1673 | HTTPDRunning = false; | 1674 | HTTPDRunning = false; |
1674 | try | 1675 | try |
1675 | { | 1676 | { |
1677 | m_PollServiceManager.Stop(); | ||
1678 | |||
1676 | m_httpListener2.ExceptionThrown -= httpServerException; | 1679 | m_httpListener2.ExceptionThrown -= httpServerException; |
1677 | //m_httpListener2.DisconnectHandler = null; | 1680 | //m_httpListener2.DisconnectHandler = null; |
1678 | 1681 | ||
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index 8d50151..3e84c55 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -45,19 +45,26 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
45 | private uint m_WorkerThreadCount = 0; | 45 | private uint m_WorkerThreadCount = 0; |
46 | private Thread[] m_workerThreads; | 46 | private Thread[] m_workerThreads; |
47 | private PollServiceWorkerThread[] m_PollServiceWorkerThreads; | 47 | private PollServiceWorkerThread[] m_PollServiceWorkerThreads; |
48 | private bool m_running = true; | 48 | private volatile bool m_running = true; |
49 | private int m_pollTimeout; | ||
49 | 50 | ||
50 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) | 51 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) |
51 | { | 52 | { |
52 | m_server = pSrv; | 53 | m_server = pSrv; |
53 | m_WorkerThreadCount = pWorkerThreadCount; | 54 | m_WorkerThreadCount = pWorkerThreadCount; |
55 | m_pollTimeout = pTimeout; | ||
56 | } | ||
57 | |||
58 | public void Start() | ||
59 | { | ||
60 | m_running = true; | ||
54 | m_workerThreads = new Thread[m_WorkerThreadCount]; | 61 | m_workerThreads = new Thread[m_WorkerThreadCount]; |
55 | m_PollServiceWorkerThreads = new PollServiceWorkerThread[m_WorkerThreadCount]; | 62 | m_PollServiceWorkerThreads = new PollServiceWorkerThread[m_WorkerThreadCount]; |
56 | 63 | ||
57 | //startup worker threads | 64 | //startup worker threads |
58 | for (uint i = 0; i < m_WorkerThreadCount; i++) | 65 | for (uint i = 0; i < m_WorkerThreadCount; i++) |
59 | { | 66 | { |
60 | m_PollServiceWorkerThreads[i] = new PollServiceWorkerThread(m_server, pTimeout); | 67 | m_PollServiceWorkerThreads[i] = new PollServiceWorkerThread(m_server, m_pollTimeout); |
61 | m_PollServiceWorkerThreads[i].ReQueue += ReQueueEvent; | 68 | m_PollServiceWorkerThreads[i].ReQueue += ReQueueEvent; |
62 | 69 | ||
63 | m_workerThreads[i] | 70 | m_workerThreads[i] |
@@ -136,8 +143,10 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
136 | 143 | ||
137 | } | 144 | } |
138 | 145 | ||
139 | ~PollServiceRequestManager() | 146 | public void Stop() |
140 | { | 147 | { |
148 | m_running = false; | ||
149 | |||
141 | foreach (object o in m_requests) | 150 | foreach (object o in m_requests) |
142 | { | 151 | { |
143 | PollServiceHttpRequest req = (PollServiceHttpRequest) o; | 152 | PollServiceHttpRequest req = (PollServiceHttpRequest) o; |
@@ -151,8 +160,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
151 | { | 160 | { |
152 | t.Abort(); | 161 | t.Abort(); |
153 | } | 162 | } |
154 | |||
155 | m_running = false; | ||
156 | } | 163 | } |
157 | } | 164 | } |
158 | } \ No newline at end of file | 165 | } \ No newline at end of file |