aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-01-19 02:04:36 +0000
committerJustin Clark-Casey (justincc)2013-02-08 21:25:57 +0000
commit82268d715e1b1ea6562fa5fb29d43d6e0d7e2c2c (patch)
treea827eb05fa8eda4d0333bcd6be062763d486174a
parentMantis 6507 keys returned by llGetAgentList incorrect for llList2Key (diff)
downloadopensim-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
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs3
-rw-r--r--OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs17
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