aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorUbitUmarov2017-06-14 03:04:14 +0100
committerUbitUmarov2017-06-14 03:04:14 +0100
commit84946e3061d7b845af2821c8693356f35368617a (patch)
tree51c2a72600116de2533843389099a9b006f9c084
parentrevert. The .net concurrent objects look nice, but mono5 cpu load with them d... (diff)
parentmain generic use JobEngine also does not need a permanent thread.. actually d... (diff)
downloadopensim-SC-84946e3061d7b845af2821c8693356f35368617a.zip
opensim-SC-84946e3061d7b845af2821c8693356f35368617a.tar.gz
opensim-SC-84946e3061d7b845af2821c8693356f35368617a.tar.bz2
opensim-SC-84946e3061d7b845af2821c8693356f35368617a.tar.xz
Merge branch 'master' into httptests
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/Monitoring/JobEngine.cs89
-rw-r--r--OpenSim/Framework/Monitoring/WorkManager.cs10
-rw-r--r--OpenSim/Framework/Util.cs10
-rw-r--r--OpenSim/Framework/WebUtil.cs20
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs52
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs29
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs41
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs3
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs2
-rwxr-xr-xOpenSim/Region/Framework/Scenes/SceneGraph.cs16
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs21
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAnimationTests.cs2
-rw-r--r--OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs10
-rw-r--r--OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs23
-rw-r--r--bin/OpenSim32.exebin0 -> 5632 bytes
-rw-r--r--bin/OpenSim32.exe.config75
-rw-r--r--bin/OpenSim32.pdb (renamed from bin/OpenSim.32BitLaunch.pdb)bin11776 -> 11776 bytes
-rw-r--r--bin/OpenSimDefaults.ini8
-rw-r--r--bin/Robust32.exebin0 -> 5632 bytes
-rw-r--r--bin/Robust32.exe.config (renamed from bin/OpenSim.32BitLaunch.exe.config)57
-rw-r--r--bin/Robust32.pdbbin0 -> 11776 bytes
-rw-r--r--bin/Robust32.vshost.exebin0 -> 22696 bytes
-rw-r--r--bin/Robust32.vshost.exe.config (renamed from bin/Robust.32BitLaunch.exe.config)45
-rwxr-xr-xbin/opensim-ode.sh4
-rwxr-xr-xbin/opensim.sh5
-rwxr-xr-xshare/32BitLaunch/OpenSim.32BitLaunch.exebin5632 -> 0 bytes
-rw-r--r--share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj94
-rw-r--r--share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj.user16
-rw-r--r--share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.sln22
-rw-r--r--share/32BitLaunch/OpenSim.32BitLaunch/Program.cs24
-rw-r--r--share/32BitLaunch/OpenSim.32BitLaunch/Properties/AssemblyInfo.cs8
-rw-r--r--share/32BitLaunch/OpenSim.32BitLaunch/app.config75
-rw-r--r--share/32BitLaunch/README5
-rwxr-xr-xshare/32BitLaunch/Robust.32BitLaunch.exebin5632 -> 0 bytes
-rw-r--r--share/32BitLaunch/Robust.32BitLaunch/Program.cs23
-rw-r--r--share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj92
-rw-r--r--share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj.user13
-rw-r--r--share/32BitLaunch/Robust.32BitLaunch/Robust32.sln22
-rw-r--r--share/32BitLaunch/Robust.32BitLaunch/app.config72
42 files changed, 733 insertions, 283 deletions
diff --git a/OpenSim/Framework/Monitoring/JobEngine.cs b/OpenSim/Framework/Monitoring/JobEngine.cs
index a6a059d..115871e 100644
--- a/OpenSim/Framework/Monitoring/JobEngine.cs
+++ b/OpenSim/Framework/Monitoring/JobEngine.cs
@@ -57,7 +57,8 @@ namespace OpenSim.Framework.Monitoring
57 /// <remarks> 57 /// <remarks>
58 /// Will be null if no job is currently running. 58 /// Will be null if no job is currently running.
59 /// </remarks> 59 /// </remarks>
60 public Job CurrentJob { get; private set; } 60 private Job m_currentJob;
61 public Job CurrentJob { get { return m_currentJob;} }
61 62
62 /// <summary> 63 /// <summary>
63 /// Number of jobs waiting to be processed. 64 /// Number of jobs waiting to be processed.
@@ -82,16 +83,15 @@ namespace OpenSim.Framework.Monitoring
82 83
83 private CancellationTokenSource m_cancelSource; 84 private CancellationTokenSource m_cancelSource;
84 85
85 /// <summary> 86 private int m_timeout = -1;
86 /// Used to signal that we are ready to complete stop. 87
87 /// </summary> 88 private bool m_threadRunnig = false;
88 private ManualResetEvent m_finishedProcessingAfterStop = new ManualResetEvent(false);
89 89
90 public JobEngine(string name, string loggingName) 90 public JobEngine(string name, string loggingName, int timeout = -1)
91 { 91 {
92 Name = name; 92 Name = name;
93 LoggingName = loggingName; 93 LoggingName = loggingName;
94 94 m_timeout = timeout;
95 RequestProcessTimeoutOnStop = 5000; 95 RequestProcessTimeoutOnStop = 5000;
96 } 96 }
97 97
@@ -104,18 +104,9 @@ namespace OpenSim.Framework.Monitoring
104 104
105 IsRunning = true; 105 IsRunning = true;
106 106
107 m_finishedProcessingAfterStop.Reset();
108
109 m_cancelSource = new CancellationTokenSource(); 107 m_cancelSource = new CancellationTokenSource();
110 108 WorkManager.RunInThreadPool(ProcessRequests, null, Name, false);
111 WorkManager.StartThread( 109 m_threadRunnig = true;
112 ProcessRequests,
113 Name,
114 ThreadPriority.Normal,
115 false,
116 true,
117 null,
118 int.MaxValue);
119 } 110 }
120 } 111 }
121 112
@@ -131,20 +122,16 @@ namespace OpenSim.Framework.Monitoring
131 m_log.DebugFormat("[JobEngine] Stopping {0}", Name); 122 m_log.DebugFormat("[JobEngine] Stopping {0}", Name);
132 123
133 IsRunning = false; 124 IsRunning = false;
134 125 if(m_threadRunnig)
135 m_finishedProcessingAfterStop.Reset(); 126 {
136 if(m_jobQueue.Count <= 0)
137 m_cancelSource.Cancel(); 127 m_cancelSource.Cancel();
138 128 m_threadRunnig = false;
139 m_finishedProcessingAfterStop.WaitOne(RequestProcessTimeoutOnStop); 129 }
140 m_finishedProcessingAfterStop.Close();
141 } 130 }
142 finally 131 finally
143 { 132 {
144 if(m_cancelSource != null) 133 if(m_cancelSource != null)
145 m_cancelSource.Dispose(); 134 m_cancelSource.Dispose();
146 if(m_finishedProcessingAfterStop != null)
147 m_finishedProcessingAfterStop.Dispose();
148 } 135 }
149 } 136 }
150 } 137 }
@@ -203,6 +190,18 @@ namespace OpenSim.Framework.Monitoring
203 /// </param> 190 /// </param>
204 public bool QueueJob(Job job) 191 public bool QueueJob(Job job)
205 { 192 {
193 lock(JobLock)
194 {
195 if(!IsRunning)
196 return false;
197
198 if(!m_threadRunnig)
199 {
200 WorkManager.RunInThreadPool(ProcessRequests, null, Name, false);
201 m_threadRunnig = true;
202 }
203 }
204
206 if (m_jobQueue.Count < m_jobQueue.BoundedCapacity) 205 if (m_jobQueue.Count < m_jobQueue.BoundedCapacity)
207 { 206 {
208 m_jobQueue.Add(job); 207 m_jobQueue.Add(job);
@@ -222,59 +221,53 @@ namespace OpenSim.Framework.Monitoring
222 221
223 m_warnOverMaxQueue = false; 222 m_warnOverMaxQueue = false;
224 } 223 }
225
226 return false; 224 return false;
227 } 225 }
228 } 226 }
229 227
230 private void ProcessRequests() 228 private void ProcessRequests(Object o)
231 { 229 {
232 while(IsRunning || m_jobQueue.Count > 0) 230 while(IsRunning)
233 { 231 {
234 try 232 try
235 { 233 {
236 CurrentJob = m_jobQueue.Take(m_cancelSource.Token); 234 if(!m_jobQueue.TryTake(out m_currentJob, m_timeout, m_cancelSource.Token))
237 }
238 catch(ObjectDisposedException e)
239 {
240 // If we see this whilst not running then it may be due to a race where this thread checks
241 // IsRunning after the stopping thread sets it to false and disposes of the cancellation source.
242 if(IsRunning)
243 throw e;
244 else
245 { 235 {
246 m_log.DebugFormat("[JobEngine] {0} stopping ignoring {1} jobs in queue", 236 lock(JobLock)
247 Name,m_jobQueue.Count); 237 m_threadRunnig = false;
248 break; 238 break;
249 } 239 }
250 } 240 }
241 catch(ObjectDisposedException e)
242 {
243 m_log.DebugFormat("[JobEngine] {0} stopping ignoring {1} jobs in queue",
244 Name,m_jobQueue.Count);
245 break;
246 }
251 catch(OperationCanceledException) 247 catch(OperationCanceledException)
252 { 248 {
253 break; 249 break;
254 } 250 }
255 251
256 if(LogLevel >= 1) 252 if(LogLevel >= 1)
257 m_log.DebugFormat("[{0}]: Processing job {1}",LoggingName,CurrentJob.Name); 253 m_log.DebugFormat("[{0}]: Processing job {1}",LoggingName,m_currentJob.Name);
258 254
259 try 255 try
260 { 256 {
261 CurrentJob.Action(); 257 m_currentJob.Action();
262 } 258 }
263 catch(Exception e) 259 catch(Exception e)
264 { 260 {
265 m_log.Error( 261 m_log.Error(
266 string.Format( 262 string.Format(
267 "[{0}]: Job {1} failed, continuing. Exception ",LoggingName,CurrentJob.Name),e); 263 "[{0}]: Job {1} failed, continuing. Exception ",LoggingName,m_currentJob.Name),e);
268 } 264 }
269 265
270 if(LogLevel >= 1) 266 if(LogLevel >= 1)
271 m_log.DebugFormat("[{0}]: Processed job {1}",LoggingName,CurrentJob.Name); 267 m_log.DebugFormat("[{0}]: Processed job {1}",LoggingName,m_currentJob.Name);
272 268
273 CurrentJob = null; 269 m_currentJob = null;
274 } 270 }
275
276 Watchdog.RemoveThread(false);
277 m_finishedProcessingAfterStop.Set();
278 } 271 }
279 272
280 public class Job 273 public class Job
diff --git a/OpenSim/Framework/Monitoring/WorkManager.cs b/OpenSim/Framework/Monitoring/WorkManager.cs
index 9d52f71..5d9b185 100644
--- a/OpenSim/Framework/Monitoring/WorkManager.cs
+++ b/OpenSim/Framework/Monitoring/WorkManager.cs
@@ -57,7 +57,7 @@ namespace OpenSim.Framework.Monitoring
57 57
58 static WorkManager() 58 static WorkManager()
59 { 59 {
60 JobEngine = new JobEngine("Non-blocking non-critical job engine", "JOB ENGINE"); 60 JobEngine = new JobEngine("Non-blocking non-critical job engine", "JOB ENGINE", 30000);
61 61
62 StatsManager.RegisterStat( 62 StatsManager.RegisterStat(
63 new Stat( 63 new Stat(
@@ -182,9 +182,9 @@ namespace OpenSim.Framework.Monitoring
182 /// <param name="callback"></param> 182 /// <param name="callback"></param>
183 /// <param name="obj"></param> 183 /// <param name="obj"></param>
184 /// <param name="name">The name of the job. This is used in monitoring and debugging.</param> 184 /// <param name="name">The name of the job. This is used in monitoring and debugging.</param>
185 public static void RunInThreadPool(System.Threading.WaitCallback callback, object obj, string name) 185 public static void RunInThreadPool(System.Threading.WaitCallback callback, object obj, string name, bool timeout = true)
186 { 186 {
187 Util.FireAndForget(callback, obj, name); 187 Util.FireAndForget(callback, obj, name, timeout);
188 } 188 }
189 189
190 /// <summary> 190 /// <summary>
@@ -231,10 +231,8 @@ namespace OpenSim.Framework.Monitoring
231 JobEngine.QueueJob(name, () => callback(obj)); 231 JobEngine.QueueJob(name, () => callback(obj));
232 else if (canRunInThisThread) 232 else if (canRunInThisThread)
233 callback(obj); 233 callback(obj);
234 else if (mustNotTimeout)
235 RunInThread(callback, obj, name, log);
236 else 234 else
237 Util.FireAndForget(callback, obj, name); 235 Util.FireAndForget(callback, obj, name, !mustNotTimeout);
238 } 236 }
239 237
240 private static void HandleControlCommand(string module, string[] args) 238 private static void HandleControlCommand(string module, string[] args)
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index f52a84c..9a1e348 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -2492,8 +2492,9 @@ namespace OpenSim.Framework
2492 public bool Running { get; set; } 2492 public bool Running { get; set; }
2493 public bool Aborted { get; set; } 2493 public bool Aborted { get; set; }
2494 private int started; 2494 private int started;
2495 public bool DoTimeout;
2495 2496
2496 public ThreadInfo(long threadFuncNum, string context) 2497 public ThreadInfo(long threadFuncNum, string context, bool dotimeout = true)
2497 { 2498 {
2498 ThreadFuncNum = threadFuncNum; 2499 ThreadFuncNum = threadFuncNum;
2499 this.context = context; 2500 this.context = context;
@@ -2501,6 +2502,7 @@ namespace OpenSim.Framework
2501 Thread = null; 2502 Thread = null;
2502 Running = false; 2503 Running = false;
2503 Aborted = false; 2504 Aborted = false;
2505 DoTimeout = dotimeout;
2504 } 2506 }
2505 2507
2506 public void Started() 2508 public void Started()
@@ -2571,7 +2573,7 @@ namespace OpenSim.Framework
2571 foreach (KeyValuePair<long, ThreadInfo> entry in activeThreads) 2573 foreach (KeyValuePair<long, ThreadInfo> entry in activeThreads)
2572 { 2574 {
2573 ThreadInfo t = entry.Value; 2575 ThreadInfo t = entry.Value;
2574 if (t.Running && !t.Aborted && (t.Elapsed() >= THREAD_TIMEOUT)) 2576 if (t.DoTimeout && t.Running && !t.Aborted && (t.Elapsed() >= THREAD_TIMEOUT))
2575 { 2577 {
2576 m_log.WarnFormat("Timeout in threadfunc {0} ({1}) {2}", t.ThreadFuncNum, t.Thread.Name, t.GetStackTrace()); 2578 m_log.WarnFormat("Timeout in threadfunc {0} ({1}) {2}", t.ThreadFuncNum, t.Thread.Name, t.GetStackTrace());
2577 t.Abort(); 2579 t.Abort();
@@ -2612,7 +2614,7 @@ namespace OpenSim.Framework
2612 FireAndForget(callback, obj, null); 2614 FireAndForget(callback, obj, null);
2613 } 2615 }
2614 2616
2615 public static void FireAndForget(System.Threading.WaitCallback callback, object obj, string context) 2617 public static void FireAndForget(System.Threading.WaitCallback callback, object obj, string context, bool dotimeout = true)
2616 { 2618 {
2617 Interlocked.Increment(ref numTotalThreadFuncsCalled); 2619 Interlocked.Increment(ref numTotalThreadFuncsCalled);
2618 2620
@@ -2634,7 +2636,7 @@ namespace OpenSim.Framework
2634 bool loggingEnabled = LogThreadPool > 0; 2636 bool loggingEnabled = LogThreadPool > 0;
2635 2637
2636 long threadFuncNum = Interlocked.Increment(ref nextThreadFuncNum); 2638 long threadFuncNum = Interlocked.Increment(ref nextThreadFuncNum);
2637 ThreadInfo threadInfo = new ThreadInfo(threadFuncNum, context); 2639 ThreadInfo threadInfo = new ThreadInfo(threadFuncNum, context, dotimeout);
2638 2640
2639 if (FireAndForgetMethod == FireAndForgetMethod.RegressionTest) 2641 if (FireAndForgetMethod == FireAndForgetMethod.RegressionTest)
2640 { 2642 {
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 7b085d0..48078ad 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -1262,18 +1262,24 @@ namespace OpenSim.Framework
1262 { 1262 {
1263 if (hwr.StatusCode == HttpStatusCode.NotFound) 1263 if (hwr.StatusCode == HttpStatusCode.NotFound)
1264 return deserial; 1264 return deserial;
1265
1265 if (hwr.StatusCode == HttpStatusCode.Unauthorized) 1266 if (hwr.StatusCode == HttpStatusCode.Unauthorized)
1266 { 1267 {
1267 m_log.Error(string.Format( 1268 m_log.ErrorFormat("[SynchronousRestObjectRequester]: Web request {0} requires authentication",
1268 "[SynchronousRestObjectRequester]: Web request {0} requires authentication ", 1269 requestUrl);
1269 requestUrl)); 1270 }
1270 return deserial; 1271 else
1272 {
1273 m_log.WarnFormat("[SynchronousRestObjectRequester]: Web request {0} returned error: {1}",
1274 requestUrl, hwr.StatusCode);
1271 } 1275 }
1272 } 1276 }
1273 else 1277 else
1274 m_log.Error(string.Format( 1278 m_log.ErrorFormat(
1275 "[SynchronousRestObjectRequester]: WebException for {0} {1} {2} ", 1279 "[SynchronousRestObjectRequester]: WebException for {0} {1} {2} {3}",
1276 verb, requestUrl, typeof(TResponse).ToString()), e); 1280 verb, requestUrl, typeof(TResponse).ToString(), e.Message);
1281
1282 return deserial;
1277 } 1283 }
1278 } 1284 }
1279 catch (System.InvalidOperationException) 1285 catch (System.InvalidOperationException)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 1091078..54359eb 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -325,6 +325,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
325 /// </summary> 325 /// </summary>
326 public LLImageManager ImageManager { get; private set; } 326 public LLImageManager ImageManager { get; private set; }
327 327
328 public JobEngine m_asyncPacketProcess;
328 private readonly LLUDPServer m_udpServer; 329 private readonly LLUDPServer m_udpServer;
329 private readonly LLUDPClient m_udpClient; 330 private readonly LLUDPClient m_udpClient;
330 private readonly UUID m_sessionId; 331 private readonly UUID m_sessionId;
@@ -378,7 +379,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
378 protected Scene m_scene; 379 protected Scene m_scene;
379 protected string m_firstName; 380 protected string m_firstName;
380 protected string m_lastName; 381 protected string m_lastName;
381 protected Thread m_clientThread;
382 protected Vector3 m_startpos; 382 protected Vector3 m_startpos;
383 protected UUID m_activeGroupID; 383 protected UUID m_activeGroupID;
384 protected string m_activeGroupName = String.Empty; 384 protected string m_activeGroupName = String.Empty;
@@ -529,7 +529,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
529 m_prioritizer = new Prioritizer(m_scene); 529 m_prioritizer = new Prioritizer(m_scene);
530 530
531 RegisterLocalPacketHandlers(); 531 RegisterLocalPacketHandlers();
532 532 string name = string.Format("AsyncInUDP-{0}",m_agentId.ToString());
533 m_asyncPacketProcess = new JobEngine(name, name, 10000);
533 IsActive = true; 534 IsActive = true;
534 } 535 }
535 536
@@ -592,6 +593,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
592 if (OnConnectionClosed != null) 593 if (OnConnectionClosed != null)
593 OnConnectionClosed(this); 594 OnConnectionClosed(this);
594 595
596 m_asyncPacketProcess.Stop();
595 597
596 // Flush all of the packets out of the UDP server for this client 598 // Flush all of the packets out of the UDP server for this client
597 if (m_udpServer != null) 599 if (m_udpServer != null)
@@ -778,12 +780,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
778 cinfo.AsyncRequests[packet.Type.ToString()]++; 780 cinfo.AsyncRequests[packet.Type.ToString()]++;
779 781
780 object obj = new AsyncPacketProcess(this, pprocessor.method, packet); 782 object obj = new AsyncPacketProcess(this, pprocessor.method, packet);
781 783/*
782 if (pprocessor.InEngine) 784 if (pprocessor.InEngine)
783 m_udpServer.IpahEngine.QueueJob(packet.Type.ToString(), () => ProcessSpecificPacketAsync(obj)); 785 m_udpServer.IpahEngine.QueueJob(packet.Type.ToString(), () => ProcessSpecificPacketAsync(obj));
784 else 786 else
785 Util.FireAndForget(ProcessSpecificPacketAsync, obj, packet.Type.ToString()); 787 Util.FireAndForget(ProcessSpecificPacketAsync, obj, packet.Type.ToString());
786 788*/
789 m_asyncPacketProcess.QueueJob(packet.Type.ToString(), () => ProcessSpecificPacketAsync(obj));
787 result = true; 790 result = true;
788 } 791 }
789 else 792 else
@@ -841,6 +844,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
841 844
842 public virtual void Start() 845 public virtual void Start()
843 { 846 {
847 m_asyncPacketProcess.Start();
844 m_scene.AddNewAgent(this, PresenceType.User); 848 m_scene.AddNewAgent(this, PresenceType.User);
845 849
846// RefreshGroupMembership(); 850// RefreshGroupMembership();
@@ -6036,8 +6040,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
6036 AddLocalPacketHandler(PacketType.ObjectExtraParams, HandleObjectExtraParams); 6040 AddLocalPacketHandler(PacketType.ObjectExtraParams, HandleObjectExtraParams);
6037 AddLocalPacketHandler(PacketType.ObjectDuplicate, HandleObjectDuplicate); 6041 AddLocalPacketHandler(PacketType.ObjectDuplicate, HandleObjectDuplicate);
6038 AddLocalPacketHandler(PacketType.RequestMultipleObjects, HandleRequestMultipleObjects); 6042 AddLocalPacketHandler(PacketType.RequestMultipleObjects, HandleRequestMultipleObjects);
6039 AddLocalPacketHandler(PacketType.ObjectSelect, HandleObjectSelect); 6043 AddLocalPacketHandler(PacketType.ObjectSelect, HandleObjectSelect, true, true);
6040 AddLocalPacketHandler(PacketType.ObjectDeselect, HandleObjectDeselect); 6044 AddLocalPacketHandler(PacketType.ObjectDeselect, HandleObjectDeselect, true, true);
6041 AddLocalPacketHandler(PacketType.ObjectPosition, HandleObjectPosition); 6045 AddLocalPacketHandler(PacketType.ObjectPosition, HandleObjectPosition);
6042 AddLocalPacketHandler(PacketType.ObjectScale, HandleObjectScale); 6046 AddLocalPacketHandler(PacketType.ObjectScale, HandleObjectScale);
6043 AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation); 6047 AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation);
@@ -8030,19 +8034,41 @@ namespace OpenSim.Region.ClientStack.LindenUDP
8030 return true; 8034 return true;
8031 } 8035 }
8032 8036
8037 Dictionary<uint, uint> objImageSeqs = null;
8038 double lastobjImageSeqsMS = 0.0;
8039
8033 private bool HandleObjectImage(IClientAPI sender, Packet Pack) 8040 private bool HandleObjectImage(IClientAPI sender, Packet Pack)
8034 { 8041 {
8035 ObjectImagePacket imagePack = (ObjectImagePacket)Pack; 8042 ObjectImagePacket imagePack = (ObjectImagePacket)Pack;
8036 8043
8037 UpdatePrimTexture handlerUpdatePrimTexture = null; 8044 UpdatePrimTexture handlerUpdatePrimTexture = OnUpdatePrimTexture;
8045 if (handlerUpdatePrimTexture == null)
8046 return true;
8047
8048 double now = Util.GetTimeStampMS();
8049 if(objImageSeqs == null || ( now - lastobjImageSeqsMS > 30000.0))
8050 {
8051 objImageSeqs = null; // yeah i know superstition...
8052 objImageSeqs = new Dictionary<uint, uint>(16);
8053 }
8054
8055 lastobjImageSeqsMS = now;
8056 uint seq = Pack.Header.Sequence;
8057 uint id;
8058 uint lastseq;
8059
8060 ObjectImagePacket.ObjectDataBlock o;
8038 for (int i = 0; i < imagePack.ObjectData.Length; i++) 8061 for (int i = 0; i < imagePack.ObjectData.Length; i++)
8039 { 8062 {
8040 handlerUpdatePrimTexture = OnUpdatePrimTexture; 8063 o = imagePack.ObjectData[i];
8041 if (handlerUpdatePrimTexture != null) 8064 id = o.ObjectLocalID;
8042 { 8065 if(objImageSeqs.TryGetValue(id, out lastseq))
8043 handlerUpdatePrimTexture(imagePack.ObjectData[i].ObjectLocalID, 8066 {
8044 imagePack.ObjectData[i].TextureEntry, this); 8067 if(seq <= lastseq)
8045 } 8068 continue;
8069 }
8070 objImageSeqs[id] = seq;
8071 handlerUpdatePrimTexture(id, o.TextureEntry, this);
8046 } 8072 }
8047 return true; 8073 return true;
8048 } 8074 }
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index ec51e28..b575ed9 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -312,9 +312,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
312 /// stack. Use zero to leave this value as the default</summary> 312 /// stack. Use zero to leave this value as the default</summary>
313 protected int m_recvBufferSize; 313 protected int m_recvBufferSize;
314 314
315 /// <summary>Flag to process packets asynchronously or synchronously</summary>
316 protected bool m_asyncPacketHandling;
317
318 /// <summary>Tracks whether or not a packet was sent each round so we know 315 /// <summary>Tracks whether or not a packet was sent each round so we know
319 /// whether or not to sleep</summary> 316 /// whether or not to sleep</summary>
320 protected bool m_packetSent; 317 protected bool m_packetSent;
@@ -417,7 +414,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
417 /// Queue some low priority but potentially high volume async requests so that they don't overwhelm available 414 /// Queue some low priority but potentially high volume async requests so that they don't overwhelm available
418 /// threadpool threads. 415 /// threadpool threads.
419 /// </summary> 416 /// </summary>
420 public JobEngine IpahEngine { get; protected set; } 417// public JobEngine IpahEngine { get; protected set; }
421 418
422 /// <summary> 419 /// <summary>
423 /// Run queue empty processing within a single persistent thread. 420 /// Run queue empty processing within a single persistent thread.
@@ -473,7 +470,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
473 IConfig config = configSource.Configs["ClientStack.LindenUDP"]; 470 IConfig config = configSource.Configs["ClientStack.LindenUDP"];
474 if (config != null) 471 if (config != null)
475 { 472 {
476 m_asyncPacketHandling = config.GetBoolean("async_packet_handling", true);
477 m_recvBufferSize = config.GetInt("client_socket_rcvbuf_size", 0); 473 m_recvBufferSize = config.GetInt("client_socket_rcvbuf_size", 0);
478 sceneThrottleBps = config.GetInt("scene_throttle_max_bps", 0); 474 sceneThrottleBps = config.GetInt("scene_throttle_max_bps", 0);
479 475
@@ -531,7 +527,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
531 { 527 {
532 StartInbound(); 528 StartInbound();
533 StartOutbound(); 529 StartOutbound();
534 IpahEngine.Start(); 530// IpahEngine.Start();
535 OqrEngine.Start(); 531 OqrEngine.Start();
536 532
537 m_elapsedMSSinceLastStatReport = Environment.TickCount; 533 m_elapsedMSSinceLastStatReport = Environment.TickCount;
@@ -540,10 +536,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
540 public void StartInbound() 536 public void StartInbound()
541 { 537 {
542 m_log.InfoFormat( 538 m_log.InfoFormat(
543 "[LLUDPSERVER]: Starting inbound packet processing for the LLUDP server in {0} mode with UsePools = {1}", 539 "[LLUDPSERVER]: Starting inbound packet processing for the LLUDP server");
544 m_asyncPacketHandling ? "asynchronous" : "synchronous", UsePools);
545 540
546 base.StartInbound(m_recvBufferSize, m_asyncPacketHandling); 541 base.StartInbound(m_recvBufferSize);
547 542
548 // This thread will process the packets received that are placed on the packetInbox 543 // This thread will process the packets received that are placed on the packetInbox
549 WorkManager.StartThread( 544 WorkManager.StartThread(
@@ -577,7 +572,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
577 m_log.Info("[LLUDPSERVER]: Shutting down the LLUDP server for " + Scene.Name); 572 m_log.Info("[LLUDPSERVER]: Shutting down the LLUDP server for " + Scene.Name);
578 base.StopOutbound(); 573 base.StopOutbound();
579 base.StopInbound(); 574 base.StopInbound();
580 IpahEngine.Stop(); 575// IpahEngine.Stop();
581 OqrEngine.Stop(); 576 OqrEngine.Stop();
582 } 577 }
583 578
@@ -696,12 +691,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
696 691
697 Scene = (Scene)scene; 692 Scene = (Scene)scene;
698 m_location = new Location(Scene.RegionInfo.RegionHandle); 693 m_location = new Location(Scene.RegionInfo.RegionHandle);
699 694/*
700 IpahEngine 695 IpahEngine
701 = new JobEngine( 696 = new JobEngine(
702 string.Format("Incoming Packet Async Handling Engine ({0})", Scene.Name), 697 string.Format("Incoming Packet Async Handling Engine ({0})", Scene.Name),
703 "INCOMING PACKET ASYNC HANDLING ENGINE"); 698 "INCOMING PACKET ASYNC HANDLING ENGINE");
704 699*/
705 OqrEngine 700 OqrEngine
706 = new JobEngine( 701 = new JobEngine(
707 string.Format("Outgoing Queue Refill Engine ({0})", Scene.Name), 702 string.Format("Outgoing Queue Refill Engine ({0})", Scene.Name),
@@ -786,7 +781,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
786 MeasuresOfInterest.AverageChangeOverTime, 781 MeasuresOfInterest.AverageChangeOverTime,
787 stat => stat.Value = GetTotalQueuedOutgoingPackets(), 782 stat => stat.Value = GetTotalQueuedOutgoingPackets(),
788 StatVerbosity.Info)); 783 StatVerbosity.Info));
789 784/*
790 StatsManager.RegisterStat( 785 StatsManager.RegisterStat(
791 new Stat( 786 new Stat(
792 "IncomingPacketAsyncRequestsWaiting", 787 "IncomingPacketAsyncRequestsWaiting",
@@ -799,7 +794,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
799 MeasuresOfInterest.None, 794 MeasuresOfInterest.None,
800 stat => stat.Value = IpahEngine.JobsWaiting, 795 stat => stat.Value = IpahEngine.JobsWaiting,
801 StatVerbosity.Debug)); 796 StatVerbosity.Debug));
802 797*/
803 StatsManager.RegisterStat( 798 StatsManager.RegisterStat(
804 new Stat( 799 new Stat(
805 "OQRERequestsWaiting", 800 "OQRERequestsWaiting",
@@ -1227,7 +1222,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1227 outgoingPacket.SequenceNumber, isReliable, isResend, udpClient.AgentID, Scene.Name); 1222 outgoingPacket.SequenceNumber, isReliable, isResend, udpClient.AgentID, Scene.Name);
1228 1223
1229 // Put the UDP payload on the wire 1224 // Put the UDP payload on the wire
1230 AsyncBeginSend(buffer); 1225// AsyncBeginSend(buffer);
1226 SyncSend(buffer);
1231 1227
1232 // Keep track of when this packet was sent out (right now) 1228 // Keep track of when this packet was sent out (right now)
1233 outgoingPacket.TickCount = Environment.TickCount & Int32.MaxValue; 1229 outgoingPacket.TickCount = Environment.TickCount & Int32.MaxValue;
@@ -1912,7 +1908,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1912 1908
1913 Buffer.BlockCopy(packetData, 0, buffer.Data, 0, length); 1909 Buffer.BlockCopy(packetData, 0, buffer.Data, 0, length);
1914 1910
1915 AsyncBeginSend(buffer); 1911// AsyncBeginSend(buffer);
1912 SyncSend(buffer);
1916 } 1913 }
1917 1914
1918 protected bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo) 1915 protected bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs b/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
index 35a0711..8dd96d6 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
@@ -57,9 +57,6 @@ namespace OpenMetaverse
57 /// <summary>UDP socket, used in either client or server mode</summary> 57 /// <summary>UDP socket, used in either client or server mode</summary>
58 private Socket m_udpSocket; 58 private Socket m_udpSocket;
59 59
60 /// <summary>Flag to process packets asynchronously or synchronously</summary>
61 private bool m_asyncPacketHandling;
62
63 /// <summary> 60 /// <summary>
64 /// Are we to use object pool(s) to reduce memory churn when receiving data? 61 /// Are we to use object pool(s) to reduce memory churn when receiving data?
65 /// </summary> 62 /// </summary>
@@ -205,10 +202,8 @@ namespace OpenMetaverse
205 /// manner (not throwing an exception when the remote side resets the 202 /// manner (not throwing an exception when the remote side resets the
206 /// connection). This call is ignored on Mono where the flag is not 203 /// connection). This call is ignored on Mono where the flag is not
207 /// necessary</remarks> 204 /// necessary</remarks>
208 public virtual void StartInbound(int recvBufferSize, bool asyncPacketHandling) 205 public virtual void StartInbound(int recvBufferSize)
209 { 206 {
210 m_asyncPacketHandling = asyncPacketHandling;
211
212 if (!IsRunningInbound) 207 if (!IsRunningInbound)
213 { 208 {
214 m_log.DebugFormat("[UDPBASE]: Starting inbound UDP loop"); 209 m_log.DebugFormat("[UDPBASE]: Starting inbound UDP loop");
@@ -407,12 +402,7 @@ namespace OpenMetaverse
407 if (IsRunningInbound) 402 if (IsRunningInbound)
408 { 403 {
409 UdpReceives++; 404 UdpReceives++;
410 405
411 // Asynchronous mode will start another receive before the
412 // callback for this packet is even fired. Very parallel :-)
413 if (m_asyncPacketHandling)
414 AsyncBeginReceive();
415
416 try 406 try
417 { 407 {
418 // get the buffer that was created in AsyncBeginReceive 408 // get the buffer that was created in AsyncBeginReceive
@@ -469,10 +459,7 @@ namespace OpenMetaverse
469// if (UsePools) 459// if (UsePools)
470// Pool.ReturnObject(buffer); 460// Pool.ReturnObject(buffer);
471 461
472 // Synchronous mode waits until the packet callback completes 462 AsyncBeginReceive();
473 // before starting the receive to fetch another packet
474 if (!m_asyncPacketHandling)
475 AsyncBeginReceive();
476 } 463 }
477 } 464 }
478 } 465 }
@@ -500,7 +487,7 @@ namespace OpenMetaverse
500 } 487 }
501 catch (SocketException) { } 488 catch (SocketException) { }
502 catch (ObjectDisposedException) { } 489 catch (ObjectDisposedException) { }
503// } 490 // }
504 } 491 }
505 492
506 void AsyncEndSend(IAsyncResult result) 493 void AsyncEndSend(IAsyncResult result)
@@ -515,5 +502,25 @@ namespace OpenMetaverse
515 catch (SocketException) { } 502 catch (SocketException) { }
516 catch (ObjectDisposedException) { } 503 catch (ObjectDisposedException) { }
517 } 504 }
505
506 public void SyncSend(UDPPacketBuffer buf)
507 {
508 try
509 {
510 m_udpSocket.SendTo(
511 buf.Data,
512 0,
513 buf.DataLength,
514 SocketFlags.None,
515 buf.RemoteEndPoint
516 );
517 UdpSends++;
518 }
519 catch (SocketException e)
520 {
521 m_log.Warn("[UDPBASE]: sync send SocketException {0} " + e.Message);
522 }
523 catch (ObjectDisposedException) { }
524 }
518 } 525 }
519} 526}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs b/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs
index 0e1a9e3..eb262d2 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs
@@ -91,6 +91,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
91 /// <summary> 91 /// <summary>
92 /// Test adding a client to the stack 92 /// Test adding a client to the stack
93 /// </summary> 93 /// </summary>
94/*
94 [Test] 95 [Test]
95 public void TestAddClient() 96 public void TestAddClient()
96 { 97 {
@@ -165,7 +166,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
165 ScenePresence spAfterAckTimeout = m_scene.GetScenePresence(sp.UUID); 166 ScenePresence spAfterAckTimeout = m_scene.GetScenePresence(sp.UUID);
166 Assert.That(spAfterAckTimeout, Is.Null); 167 Assert.That(spAfterAckTimeout, Is.Null);
167 } 168 }
168 169*/
169// /// <summary> 170// /// <summary>
170// /// Test removing a client from the stack 171// /// Test removing a client from the stack
171// /// </summary> 172// /// </summary>
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index 1ce6927..56c654f 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -163,7 +163,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
163 m_incomingSceneObjectEngine 163 m_incomingSceneObjectEngine
164 = new JobEngine( 164 = new JobEngine(
165 string.Format("HG Incoming Scene Object Engine ({0})", scene.Name), 165 string.Format("HG Incoming Scene Object Engine ({0})", scene.Name),
166 "HG INCOMING SCENE OBJECT ENGINE"); 166 "HG INCOMING SCENE OBJECT ENGINE", 30000);
167 167
168 StatsManager.RegisterStat( 168 StatsManager.RegisterStat(
169 new Stat( 169 new Stat(
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index bba7a96..057ca17 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2865,7 +2865,7 @@ namespace OpenSim.Region.Framework.Scenes
2865 root.SendPropertiesToClient(sp.ControllingClient); 2865 root.SendPropertiesToClient(sp.ControllingClient);
2866 if (oldUsePhysics && (root.Flags & PrimFlags.Physics) == 0) 2866 if (oldUsePhysics && (root.Flags & PrimFlags.Physics) == 0)
2867 { 2867 {
2868 sp.ControllingClient.SendAlertMessage("Object physics canceled"); 2868 sp.ControllingClient.SendAlertMessage("Object physics cancelled");
2869 } 2869 }
2870 } 2870 }
2871 } 2871 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 96b8c8b..ae827f4 100755
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -1604,13 +1604,16 @@ namespace OpenSim.Region.Framework.Scenes
1604 /// <param name="remoteClient"></param> 1604 /// <param name="remoteClient"></param>
1605 protected internal void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) 1605 protected internal void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient)
1606 { 1606 {
1607 SceneObjectGroup group = GetGroupByPrim(localID); 1607 SceneObjectPart part = GetSceneObjectPart(localID);
1608 if(part == null)
1609 return;
1608 1610
1609 if (group != null) 1611 SceneObjectGroup group = part.ParentGroup;
1612 if (group != null && !group.IsDeleted)
1610 { 1613 {
1611 if (m_parentScene.Permissions.CanEditObject(group, remoteClient)) 1614 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1612 { 1615 {
1613 group.UpdateTextureEntry(localID, texture); 1616 part.UpdateTextureEntry(texture);
1614 } 1617 }
1615 } 1618 }
1616 } 1619 }
@@ -1661,8 +1664,11 @@ namespace OpenSim.Region.Framework.Scenes
1661 1664
1662 if (wantedPhys != group.UsesPhysics && remoteClient != null) 1665 if (wantedPhys != group.UsesPhysics && remoteClient != null)
1663 { 1666 {
1664 remoteClient.SendAlertMessage("Object physics canceled because exceeds the limit of " + 1667 if(m_parentScene.m_linksetPhysCapacity != 0)
1665 m_parentScene.m_linksetPhysCapacity + " physical prims with shape type not set to None"); 1668 remoteClient.SendAlertMessage("Object physics cancelled because it exceeds limits for physical prims, either size or number of primswith shape type not set to None");
1669 else
1670 remoteClient.SendAlertMessage("Object physics cancelled because it exceeds size limits for physical prims");
1671
1666 group.RootPart.ScheduleFullUpdate(); 1672 group.RootPart.ScheduleFullUpdate();
1667 } 1673 }
1668 } 1674 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 1695d9b..fdfe8ae 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -4129,20 +4129,6 @@ namespace OpenSim.Region.Framework.Scenes
4129 return Parts.Count(); 4129 return Parts.Count();
4130 } 4130 }
4131 4131
4132 /// <summary>
4133 /// Update the texture entry for this part
4134 /// </summary>
4135 /// <param name="localID"></param>
4136 /// <param name="textureEntry"></param>
4137 public void UpdateTextureEntry(uint localID, byte[] textureEntry)
4138 {
4139 SceneObjectPart part = GetPart(localID);
4140 if (part != null)
4141 {
4142 part.UpdateTextureEntry(textureEntry);
4143 }
4144 }
4145
4146 public void AdjustChildPrimPermissions(bool forceTaskInventoryPermissive) 4132 public void AdjustChildPrimPermissions(bool forceTaskInventoryPermissive)
4147 { 4133 {
4148 uint newOwnerMask = (uint)(PermissionMask.All | PermissionMask.Export) & 0xfffffff0; // Mask folded bits 4134 uint newOwnerMask = (uint)(PermissionMask.All | PermissionMask.Export) & 0xfffffff0; // Mask folded bits
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 61aa915..c2eac24 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -5016,6 +5016,9 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5016 if (newTex.FaceTextures[i] != null) 5016 if (newTex.FaceTextures[i] != null)
5017 newFace = newTex.FaceTextures[i]; 5017 newFace = newTex.FaceTextures[i];
5018 5018
5019 if (oldFace.TextureID != newFace.TextureID)
5020 changeFlags |= Changed.TEXTURE;
5021
5019 Color4 oldRGBA = oldFace.RGBA; 5022 Color4 oldRGBA = oldFace.RGBA;
5020 Color4 newRGBA = newFace.RGBA; 5023 Color4 newRGBA = newFace.RGBA;
5021 5024
@@ -5025,9 +5028,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5025 oldRGBA.A != newRGBA.A) 5028 oldRGBA.A != newRGBA.A)
5026 changeFlags |= Changed.COLOR; 5029 changeFlags |= Changed.COLOR;
5027 5030
5028 if (oldFace.TextureID != newFace.TextureID)
5029 changeFlags |= Changed.TEXTURE;
5030
5031 // Max change, skip the rest of testing 5031 // Max change, skip the rest of testing
5032 if (changeFlags == (Changed.TEXTURE | Changed.COLOR)) 5032 if (changeFlags == (Changed.TEXTURE | Changed.COLOR))
5033 break; 5033 break;
@@ -5053,17 +5053,11 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5053 m_shape.TextureEntry = newTex.GetBytes(); 5053 m_shape.TextureEntry = newTex.GetBytes();
5054 if (changeFlags != 0) 5054 if (changeFlags != 0)
5055 TriggerScriptChangedEvent(changeFlags); 5055 TriggerScriptChangedEvent(changeFlags);
5056 UpdateFlag = UpdateRequired.FULL;
5057 ParentGroup.HasGroupChanged = true; 5056 ParentGroup.HasGroupChanged = true;
5058
5059 //This is madness..
5060 //ParentGroup.ScheduleGroupForFullUpdate();
5061 //This is sparta
5062 ScheduleFullUpdate(); 5057 ScheduleFullUpdate();
5063 } 5058 }
5064 } 5059 }
5065 5060
5066
5067 internal void UpdatePhysicsSubscribedEvents() 5061 internal void UpdatePhysicsSubscribedEvents()
5068 { 5062 {
5069 PhysicsActor pa = PhysActor; 5063 PhysicsActor pa = PhysActor;
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 47af3b8..7e3adb9 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2280,18 +2280,13 @@ namespace OpenSim.Region.Framework.Scenes
2280 m_lastChildAgentUpdateDrawDistance = DrawDistance; 2280 m_lastChildAgentUpdateDrawDistance = DrawDistance;
2281 m_lastChildAgentUpdatePosition = AbsolutePosition; 2281 m_lastChildAgentUpdatePosition = AbsolutePosition;
2282 m_childUpdatesBusy = false; // allow them 2282 m_childUpdatesBusy = false; // allow them
2283
2284
2285 } 2283 }
2286 2284
2287 m_log.DebugFormat("[CompleteMovement] openChildAgents: {0}ms", Util.EnvironmentTickCountSubtract(ts)); 2285 m_log.DebugFormat("[CompleteMovement] openChildAgents: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2288 2286
2289
2290
2291 // send the rest of the world 2287 // send the rest of the world
2292 if (m_teleportFlags > 0 && !IsNPC || m_currentParcelHide) 2288 if (m_teleportFlags > 0 && !IsNPC || m_currentParcelHide)
2293 SendInitialDataToMe(); 2289 SendInitialDataToMe();
2294
2295 2290
2296 // priority uses avatar position only 2291 // priority uses avatar position only
2297// m_reprioritizationLastPosition = AbsolutePosition; 2292// m_reprioritizationLastPosition = AbsolutePosition;
@@ -2958,31 +2953,32 @@ namespace OpenSim.Region.Framework.Scenes
2958 Dir_ControlFlags.DIR_CONTROL_FLAG_DOWN)); 2953 Dir_ControlFlags.DIR_CONTROL_FLAG_DOWN));
2959 2954
2960 MovementFlag &= noMovFlagsMask; 2955 MovementFlag &= noMovFlagsMask;
2961 AgentControlFlags &= noMovFlagsMask; 2956 uint tmpAgentControlFlags = (uint)m_AgentControlFlags;
2957 tmpAgentControlFlags &= noMovFlagsMask;
2962 2958
2963 if (LocalVectorToTarget3D.X < 0) //MoveBack 2959 if (LocalVectorToTarget3D.X < 0) //MoveBack
2964 { 2960 {
2965 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK; 2961 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
2966 AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK; 2962 tmpAgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
2967 updated = true; 2963 updated = true;
2968 } 2964 }
2969 else if (LocalVectorToTarget3D.X > 0) //Move Forward 2965 else if (LocalVectorToTarget3D.X > 0) //Move Forward
2970 { 2966 {
2971 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD; 2967 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
2972 AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD; 2968 tmpAgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
2973 updated = true; 2969 updated = true;
2974 } 2970 }
2975 2971
2976 if (LocalVectorToTarget3D.Y > 0) //MoveLeft 2972 if (LocalVectorToTarget3D.Y > 0) //MoveLeft
2977 { 2973 {
2978 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT; 2974 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
2979 AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT; 2975 tmpAgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
2980 updated = true; 2976 updated = true;
2981 } 2977 }
2982 else if (LocalVectorToTarget3D.Y < 0) //MoveRight 2978 else if (LocalVectorToTarget3D.Y < 0) //MoveRight
2983 { 2979 {
2984 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT; 2980 MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
2985 AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT; 2981 tmpAgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
2986 updated = true; 2982 updated = true;
2987 } 2983 }
2988 2984
@@ -3006,6 +3002,7 @@ namespace OpenSim.Region.Framework.Scenes
3006// "[SCENE PRESENCE]: HandleMoveToTargetUpdate adding {0} to move vector {1} for {2}", 3002// "[SCENE PRESENCE]: HandleMoveToTargetUpdate adding {0} to move vector {1} for {2}",
3007// LocalVectorToTarget3D, agent_control_v3, Name); 3003// LocalVectorToTarget3D, agent_control_v3, Name);
3008 3004
3005 m_AgentControlFlags = (AgentManager.ControlFlags) tmpAgentControlFlags;
3009 agent_control_v3 += LocalVectorToTarget3D; 3006 agent_control_v3 += LocalVectorToTarget3D;
3010 } 3007 }
3011 catch (Exception e) 3008 catch (Exception e)
@@ -4970,8 +4967,8 @@ namespace OpenSim.Region.Framework.Scenes
4970 4967
4971// if (m_updateCount > 0) 4968// if (m_updateCount > 0)
4972// { 4969// {
4973 if (Animator != null && Animator.UpdateMovementAnimations()) 4970// if (Animator != null && Animator.UpdateMovementAnimations())
4974 TriggerScenePresenceUpdated(); 4971// TriggerScenePresenceUpdated();
4975// m_updateCount--; 4972// m_updateCount--;
4976// } 4973// }
4977 4974
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAnimationTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAnimationTests.cs
index 42d91b9..d650c43 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAnimationTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAnimationTests.cs
@@ -60,7 +60,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
60 TestScene scene = new SceneHelpers().SetupScene(); 60 TestScene scene = new SceneHelpers().SetupScene();
61 ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); 61 ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
62 sp.Flying = true; 62 sp.Flying = true;
63 sp.PhysicsCollisionUpdate(new CollisionEventUpdate()); 63 sp.Animator.UpdateMovementAnimations();
64 64
65 Assert.That(sp.Animator.CurrentMovementAnimation, Is.EqualTo("HOVER")); 65 Assert.That(sp.Animator.CurrentMovementAnimation, Is.EqualTo("HOVER"));
66 } 66 }
diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs
index a5ee2c9..dc87a78 100644
--- a/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs
+++ b/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs
@@ -80,7 +80,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
80 public float MeshSculptphysicalLOD = 32; 80 public float MeshSculptphysicalLOD = 32;
81 81
82 82
83 private OpenSim.Framework.BlockingQueue<ODEPhysRepData> createqueue = new OpenSim.Framework.BlockingQueue<ODEPhysRepData>(); 83 private OpenSim.Framework.BlockingQueue<ODEPhysRepData> workQueue = new OpenSim.Framework.BlockingQueue<ODEPhysRepData>();
84 private bool m_running; 84 private bool m_running;
85 85
86 private Thread m_thread; 86 private Thread m_thread;
@@ -110,7 +110,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
110 110
111 while(m_running) 111 while(m_running)
112 { 112 {
113 ODEPhysRepData nextRep = createqueue.Dequeue(); 113 ODEPhysRepData nextRep = workQueue.Dequeue();
114 if(!m_running) 114 if(!m_running)
115 return; 115 return;
116 if (nextRep == null) 116 if (nextRep == null)
@@ -139,7 +139,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
139 try 139 try
140 { 140 {
141 m_thread.Abort(); 141 m_thread.Abort();
142 createqueue.Clear(); 142 workQueue.Clear();
143 } 143 }
144 catch 144 catch
145 { 145 {
@@ -196,7 +196,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
196 repData.meshState = MeshState.loadingAsset; 196 repData.meshState = MeshState.loadingAsset;
197 197
198 repData.comand = meshWorkerCmnds.getmesh; 198 repData.comand = meshWorkerCmnds.getmesh;
199 createqueue.Enqueue(repData); 199 workQueue.Enqueue(repData);
200 } 200 }
201 } 201 }
202 202
@@ -242,7 +242,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
242 if (needsMeshing(repData)) // no need for pbs now? 242 if (needsMeshing(repData)) // no need for pbs now?
243 { 243 {
244 repData.comand = meshWorkerCmnds.changefull; 244 repData.comand = meshWorkerCmnds.changefull;
245 createqueue.Enqueue(repData); 245 workQueue.Enqueue(repData);
246 } 246 }
247 } 247 }
248 else 248 else
diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs
index 9bf71f7..4bed0d2 100644
--- a/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs
+++ b/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs
@@ -165,6 +165,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
165 165
166 private float m_density; 166 private float m_density;
167 private byte m_shapetype; 167 private byte m_shapetype;
168 private byte m_fakeShapetype;
168 public bool _zeroFlag; 169 public bool _zeroFlag;
169 private bool m_lastUpdateSent; 170 private bool m_lastUpdateSent;
170 171
@@ -420,7 +421,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
420 { 421 {
421 if (value.IsFinite()) 422 if (value.IsFinite())
422 { 423 {
423 _parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, value, m_shapetype); 424 _parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, value, m_fakeShapetype);
424 } 425 }
425 else 426 else
426 { 427 {
@@ -630,7 +631,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
630 set 631 set
631 { 632 {
632// AddChange(changes.Shape, value); 633// AddChange(changes.Shape, value);
633 _parent_scene.m_meshWorker.ChangeActorPhysRep(this, value, _size, m_shapetype); 634 _parent_scene.m_meshWorker.ChangeActorPhysRep(this, value, _size, m_fakeShapetype);
634 } 635 }
635 } 636 }
636 637
@@ -638,11 +639,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
638 { 639 {
639 get 640 get
640 { 641 {
641 return m_shapetype; 642 return m_fakeShapetype;
642 } 643 }
643 set 644 set
644 { 645 {
645 m_shapetype = value; 646 m_fakeShapetype = value;
646 _parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, _size, value); 647 _parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, _size, value);
647 } 648 }
648 } 649 }
@@ -1329,7 +1330,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1329 1330
1330 _triMeshData = IntPtr.Zero; 1331 _triMeshData = IntPtr.Zero;
1331 1332
1332 m_shapetype = _shapeType; 1333 m_fakeShapetype = _shapeType;
1333 1334
1334 m_lastdoneSelected = false; 1335 m_lastdoneSelected = false;
1335 m_isSelected = false; 1336 m_isSelected = false;
@@ -1346,7 +1347,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1346 AddChange(changes.Add, null); 1347 AddChange(changes.Add, null);
1347 1348
1348 // get basic mass parameters 1349 // get basic mass parameters
1349 ODEPhysRepData repData = _parent_scene.m_meshWorker.NewActorPhysRep(this, _pbs, _size, m_shapetype); 1350 ODEPhysRepData repData = _parent_scene.m_meshWorker.NewActorPhysRep(this, _pbs, _size, _shapeType);
1350 1351
1351 primVolume = repData.volume; 1352 primVolume = repData.volume;
1352 m_OBB = repData.OBB; 1353 m_OBB = repData.OBB;
@@ -3161,7 +3162,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3161 { 3162 {
3162 _size = repData.size; //?? 3163 _size = repData.size; //??
3163 _pbs = repData.pbs; 3164 _pbs = repData.pbs;
3164 m_shapetype = repData.shapetype;
3165 3165
3166 m_mesh = repData.mesh; 3166 m_mesh = repData.mesh;
3167 3167
@@ -3200,9 +3200,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3200 { 3200 {
3201 repData.size = _size; 3201 repData.size = _size;
3202 repData.pbs = _pbs; 3202 repData.pbs = _pbs;
3203 repData.shapetype = m_shapetype; 3203 repData.shapetype = m_fakeShapetype;
3204 _parent_scene.m_meshWorker.RequestMesh(repData); 3204 _parent_scene.m_meshWorker.RequestMesh(repData);
3205 } 3205 }
3206 else
3207 m_shapetype = repData.shapetype;
3206 } 3208 }
3207 3209
3208 private void changePhysRepData(ODEPhysRepData repData) 3210 private void changePhysRepData(ODEPhysRepData repData)
@@ -3236,7 +3238,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3236 3238
3237 _size = repData.size; 3239 _size = repData.size;
3238 _pbs = repData.pbs; 3240 _pbs = repData.pbs;
3239 m_shapetype = repData.shapetype;
3240 3241
3241 m_mesh = repData.mesh; 3242 m_mesh = repData.mesh;
3242 3243
@@ -3287,9 +3288,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3287 { 3288 {
3288 repData.size = _size; 3289 repData.size = _size;
3289 repData.pbs = _pbs; 3290 repData.pbs = _pbs;
3290 repData.shapetype = m_shapetype; 3291 repData.shapetype = m_fakeShapetype;
3291 _parent_scene.m_meshWorker.RequestMesh(repData); 3292 _parent_scene.m_meshWorker.RequestMesh(repData);
3292 } 3293 }
3294 else
3295 m_shapetype = repData.shapetype;
3293 } 3296 }
3294 3297
3295 private void changeFloatOnWater(bool newval) 3298 private void changeFloatOnWater(bool newval)
diff --git a/bin/OpenSim32.exe b/bin/OpenSim32.exe
new file mode 100644
index 0000000..74477c0
--- /dev/null
+++ b/bin/OpenSim32.exe
Binary files differ
diff --git a/bin/OpenSim32.exe.config b/bin/OpenSim32.exe.config
new file mode 100644
index 0000000..9224240
--- /dev/null
+++ b/bin/OpenSim32.exe.config
@@ -0,0 +1,75 @@
1<configuration>
2 <configSections>
3 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
4 </configSections>
5 <startup>
6 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
7 </startup>
8 <runtime>
9 <loadFromRemoteSources enabled="true" />
10 </runtime>
11 <appSettings>
12 </appSettings>
13 <log4net>
14 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
15 <filter type="log4net.Filter.LoggerMatchFilter">
16 <loggerToMatch value="special"/>
17 <acceptOnMatch value="false"/>
18 </filter>
19 <layout type="log4net.Layout.PatternLayout">
20 <conversionPattern value="%date{HH:mm:ss} - %message" />
21 <!-- console log with milliseconds. Useful for debugging -->
22 <!-- <conversionPattern value="%date{HH:mm:ss.fff} - %message" /> -->
23 </layout>
24 </appender>
25
26 <!-- If you want automatic log-rolling then use RollingFileAppender instead of FileAppender:
27 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
28 <file value="log/OpenSim.log" />
29 <rollingStyle value="Date" />
30 <datePattern value="'.'yyyy-MM-dd"/>
31 ...
32-->
33
34 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
35 <file value="OpenSim.log" />
36 <appendToFile value="true" />
37 <filter type="log4net.Filter.LoggerMatchFilter">
38 <loggerToMatch value="special"/>
39 <acceptOnMatch value="false"/>
40 </filter>
41 <layout type="log4net.Layout.PatternLayout">
42 <conversionPattern value="%date %-5level - %logger %message%newline" />
43 </layout>
44 </appender>
45
46 <appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
47 <file value="OpenSimStats.log"/>
48 <appendToFile value="true" />
49 <layout type="log4net.Layout.PatternLayout">
50 <conversionPattern value="%date - %message%newline" />
51 </layout>
52 </appender>
53
54 <root>
55 <level value="DEBUG" />
56 <appender-ref ref="Console" />
57 <appender-ref ref="LogFileAppender" />
58 </root>
59
60 <!-- Independently control logging level for XEngine -->
61 <logger name="OpenSim.Region.ScriptEngine.XEngine">
62 <level value="INFO"/>
63 </logger>
64
65 <!-- Independently control logging level for per region module loading -->
66 <logger name="OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin">
67 <level value="INFO"/>
68 </logger>
69
70 <!-- used for stats recording -->
71 <logger name="special.StatsLogger">
72 <appender-ref ref="StatsLogFileAppender"/>
73 </logger>
74 </log4net>
75</configuration> \ No newline at end of file
diff --git a/bin/OpenSim.32BitLaunch.pdb b/bin/OpenSim32.pdb
index 5083dd5..86d3058 100644
--- a/bin/OpenSim.32BitLaunch.pdb
+++ b/bin/OpenSim32.pdb
Binary files differ
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 7bfb32a..f7e2f5f 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -663,14 +663,6 @@
663 663
664 664
665[ClientStack.LindenUDP] 665[ClientStack.LindenUDP]
666 ; Set this to true to process incoming packets asynchronously. Networking is
667 ; already separated from packet handling with a queue, so this will only
668 ; affect whether networking internals such as packet decoding and
669 ; acknowledgement accounting are done synchronously or asynchronously
670 ; Default is true.
671 ;
672 ;async_packet_handling = true
673
674 ; The client socket receive buffer size determines how many 666 ; The client socket receive buffer size determines how many
675 ; incoming requests we can process; the default on .NET is 8192 667 ; incoming requests we can process; the default on .NET is 8192
676 ; which is about 2 4k-sized UDP datagrams. On mono this is 668 ; which is about 2 4k-sized UDP datagrams. On mono this is
diff --git a/bin/Robust32.exe b/bin/Robust32.exe
new file mode 100644
index 0000000..e5e4674
--- /dev/null
+++ b/bin/Robust32.exe
Binary files differ
diff --git a/bin/OpenSim.32BitLaunch.exe.config b/bin/Robust32.exe.config
index 5b7807a..ca3ee0e 100644
--- a/bin/OpenSim.32BitLaunch.exe.config
+++ b/bin/Robust32.exe.config
@@ -1,75 +1,72 @@
1<?xml version="1.0" encoding="utf-8" ?> 1<?xml version="1.0" encoding="utf-8"?>
2<configuration> 2<configuration>
3 <configSections> 3 <configSections>
4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
5 </configSections> 5 </configSections>
6 <startup>
7 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
8 </startup>
6 <runtime> 9 <runtime>
7 <loadFromRemoteSources enabled="true" /> 10 <loadFromRemoteSources enabled="true" />
8 <gcConcurrent enabled="true" />
9 <gcServer enabled="true" />
10 </runtime> 11 </runtime>
11 <appSettings> 12 <appSettings>
13 <add key="ClientSettingsProvider.ServiceUri" value="" />
12 </appSettings> 14 </appSettings>
13 <log4net> 15 <log4net>
14 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console"> 16 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
15 <filter type="log4net.Filter.LoggerMatchFilter"> 17 <filter type="log4net.Filter.LoggerMatchFilter">
16 <loggerToMatch value="special"/> 18 <loggerToMatch value="special" />
17 <acceptOnMatch value="false"/> 19 <acceptOnMatch value="false" />
18 </filter> 20 </filter>
19 <layout type="log4net.Layout.PatternLayout"> 21 <layout type="log4net.Layout.PatternLayout">
20 <conversionPattern value="%date{HH:mm:ss} - %message" /> 22 <conversionPattern value="%date{HH:mm:ss} - %message" />
21 <!-- console log with milliseconds. Useful for debugging -->
22<!-- <conversionPattern value="%date{HH:mm:ss.fff} - %message" /> -->
23 </layout> 23 </layout>
24 </appender> 24 </appender>
25 25 <!-- If you want automatic log-rolling then use RollingFileAppender instead of FileAppender:
26<!-- If you want automatic log-rolling then use RollingFileAppender instead of FileAppender:
27 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 26 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
28 <file value="log/OpenSim.32BitLaunch.log" /> 27 <file value="log/Robust.log" />
29 <rollingStyle value="Date" /> 28 <rollingStyle value="Date" />
30 <datePattern value="'.'yyyy-MM-dd"/> 29 <datePattern value="'.'yyyy-MM-dd"/>
31 ... 30 ...
32--> 31-->
33
34 <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 32 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
35 <file value="OpenSim.32BitLaunch.log" /> 33 <file value="Robust.log" />
36 <appendToFile value="true" /> 34 <appendToFile value="true" />
37 <filter type="log4net.Filter.LoggerMatchFilter"> 35 <filter type="log4net.Filter.LoggerMatchFilter">
38 <loggerToMatch value="special"/> 36 <loggerToMatch value="special" />
39 <acceptOnMatch value="false"/> 37 <acceptOnMatch value="false" />
40 </filter> 38 </filter>
41 <layout type="log4net.Layout.PatternLayout"> 39 <layout type="log4net.Layout.PatternLayout">
42 <conversionPattern value="%date %-5level - %logger %message%newline" /> 40 <conversionPattern value="%date %-5level - %logger %message%newline" />
43 </layout> 41 </layout>
44 </appender> 42 </appender>
45
46 <appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender"> 43 <appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
47 <file value="OpenSimStats.log"/> 44 <file value="RobustStats.log" />
48 <appendToFile value="true" /> 45 <appendToFile value="true" />
49 <layout type="log4net.Layout.PatternLayout"> 46 <layout type="log4net.Layout.PatternLayout">
50 <conversionPattern value="%date - %message%newline" /> 47 <conversionPattern value="%date - %message%newline" />
51 </layout> 48 </layout>
52 </appender> 49 </appender>
53
54 <root> 50 <root>
55 <level value="DEBUG" /> 51 <level value="DEBUG" />
56 <appender-ref ref="Console" /> 52 <appender-ref ref="Console" />
57 <appender-ref ref="LogFileAppender" /> 53 <appender-ref ref="LogFileAppender" />
58 </root> 54 </root>
59
60 <!-- Independently control logging level for XEngine -->
61 <logger name="OpenSim.Region.ScriptEngine.XEngine">
62 <level value="INFO"/>
63 </logger>
64
65 <!-- Independently control logging level for per region module loading -->
66 <logger name="OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin">
67 <level value="INFO"/>
68 </logger>
69
70 <!-- used for stats recording --> 55 <!-- used for stats recording -->
71 <logger name="special.StatsLogger"> 56 <logger name="special.StatsLogger">
72 <appender-ref ref="StatsLogFileAppender"/> 57 <appender-ref ref="StatsLogFileAppender" />
73 </logger> 58 </logger>
74 </log4net> 59 </log4net>
75</configuration> 60 <system.web>
61 <membership defaultProvider="ClientAuthenticationMembershipProvider">
62 <providers>
63 <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
64 </providers>
65 </membership>
66 <roleManager defaultProvider="ClientRoleProvider" enabled="true">
67 <providers>
68 <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
69 </providers>
70 </roleManager>
71 </system.web>
72</configuration> \ No newline at end of file
diff --git a/bin/Robust32.pdb b/bin/Robust32.pdb
new file mode 100644
index 0000000..15a0d75
--- /dev/null
+++ b/bin/Robust32.pdb
Binary files differ
diff --git a/bin/Robust32.vshost.exe b/bin/Robust32.vshost.exe
new file mode 100644
index 0000000..681ab77
--- /dev/null
+++ b/bin/Robust32.vshost.exe
Binary files differ
diff --git a/bin/Robust.32BitLaunch.exe.config b/bin/Robust32.vshost.exe.config
index 0399a1b..ca3ee0e 100644
--- a/bin/Robust.32BitLaunch.exe.config
+++ b/bin/Robust32.vshost.exe.config
@@ -1,63 +1,72 @@
1<?xml version="1.0" encoding="utf-8" ?> 1<?xml version="1.0" encoding="utf-8"?>
2<configuration> 2<configuration>
3 <configSections> 3 <configSections>
4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
5 </configSections> 5 </configSections>
6 <startup>
7 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
8 </startup>
6 <runtime> 9 <runtime>
7 <loadFromRemoteSources enabled="true" /> 10 <loadFromRemoteSources enabled="true" />
8 <gcConcurrent enabled="true" />
9 <gcServer enabled="true" />
10 </runtime> 11 </runtime>
11 <appSettings> 12 <appSettings>
13 <add key="ClientSettingsProvider.ServiceUri" value="" />
12 </appSettings> 14 </appSettings>
13 <log4net> 15 <log4net>
14 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console"> 16 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
15 <filter type="log4net.Filter.LoggerMatchFilter"> 17 <filter type="log4net.Filter.LoggerMatchFilter">
16 <loggerToMatch value="special"/> 18 <loggerToMatch value="special" />
17 <acceptOnMatch value="false"/> 19 <acceptOnMatch value="false" />
18 </filter> 20 </filter>
19 <layout type="log4net.Layout.PatternLayout"> 21 <layout type="log4net.Layout.PatternLayout">
20 <conversionPattern value="%date{HH:mm:ss} - %message" /> 22 <conversionPattern value="%date{HH:mm:ss} - %message" />
21 </layout> 23 </layout>
22 </appender> 24 </appender>
23 25 <!-- If you want automatic log-rolling then use RollingFileAppender instead of FileAppender:
24<!-- If you want automatic log-rolling then use RollingFileAppender instead of FileAppender:
25 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 26 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
26 <file value="log/Robust.32BitLaunch.log" /> 27 <file value="log/Robust.log" />
27 <rollingStyle value="Date" /> 28 <rollingStyle value="Date" />
28 <datePattern value="'.'yyyy-MM-dd"/> 29 <datePattern value="'.'yyyy-MM-dd"/>
29 ... 30 ...
30--> 31-->
31
32 <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 32 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
33 <file value="Robust.32BitLaunch.log" /> 33 <file value="Robust.log" />
34 <appendToFile value="true" /> 34 <appendToFile value="true" />
35 <filter type="log4net.Filter.LoggerMatchFilter"> 35 <filter type="log4net.Filter.LoggerMatchFilter">
36 <loggerToMatch value="special"/> 36 <loggerToMatch value="special" />
37 <acceptOnMatch value="false"/> 37 <acceptOnMatch value="false" />
38 </filter> 38 </filter>
39 <layout type="log4net.Layout.PatternLayout"> 39 <layout type="log4net.Layout.PatternLayout">
40 <conversionPattern value="%date %-5level - %logger %message%newline" /> 40 <conversionPattern value="%date %-5level - %logger %message%newline" />
41 </layout> 41 </layout>
42 </appender> 42 </appender>
43
44 <appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender"> 43 <appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
45 <file value="RobustStats.log"/> 44 <file value="RobustStats.log" />
46 <appendToFile value="true" /> 45 <appendToFile value="true" />
47 <layout type="log4net.Layout.PatternLayout"> 46 <layout type="log4net.Layout.PatternLayout">
48 <conversionPattern value="%date - %message%newline" /> 47 <conversionPattern value="%date - %message%newline" />
49 </layout> 48 </layout>
50 </appender> 49 </appender>
51
52 <root> 50 <root>
53 <level value="DEBUG" /> 51 <level value="DEBUG" />
54 <appender-ref ref="Console" /> 52 <appender-ref ref="Console" />
55 <appender-ref ref="LogFileAppender" /> 53 <appender-ref ref="LogFileAppender" />
56 </root> 54 </root>
57
58 <!-- used for stats recording --> 55 <!-- used for stats recording -->
59 <logger name="special.StatsLogger"> 56 <logger name="special.StatsLogger">
60 <appender-ref ref="StatsLogFileAppender"/> 57 <appender-ref ref="StatsLogFileAppender" />
61 </logger> 58 </logger>
62 </log4net> 59 </log4net>
63</configuration> 60 <system.web>
61 <membership defaultProvider="ClientAuthenticationMembershipProvider">
62 <providers>
63 <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
64 </providers>
65 </membership>
66 <roleManager defaultProvider="ClientRoleProvider" enabled="true">
67 <providers>
68 <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
69 </providers>
70 </roleManager>
71 </system.web>
72</configuration> \ No newline at end of file
diff --git a/bin/opensim-ode.sh b/bin/opensim-ode.sh
deleted file mode 100755
index 7c61571..0000000
--- a/bin/opensim-ode.sh
+++ /dev/null
@@ -1,4 +0,0 @@
1#!/bin/sh
2echo "Starting OpenSimulator with ODE or ubOde. If you get an error saying limit: Operation not permitted. Then you will need to chmod 0600 /etc/limits"
3ulimit -s 262144
4mono OpenSim.exe
diff --git a/bin/opensim.sh b/bin/opensim.sh
new file mode 100755
index 0000000..508d925
--- /dev/null
+++ b/bin/opensim.sh
@@ -0,0 +1,5 @@
1#!/bin/sh
2ulimit -s 1048576
3# next option may improve SGen gc (for opensim only) you may also need to increase nursery size on large regions
4#export MONO_GC_PARAMS="minor=split,promotion-age=14"
5mono --desktop OpenSim.exe
diff --git a/share/32BitLaunch/OpenSim.32BitLaunch.exe b/share/32BitLaunch/OpenSim.32BitLaunch.exe
deleted file mode 100755
index 62c14af..0000000
--- a/share/32BitLaunch/OpenSim.32BitLaunch.exe
+++ /dev/null
Binary files differ
diff --git a/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj b/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj
new file mode 100644
index 0000000..c9a03e1
--- /dev/null
+++ b/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj
@@ -0,0 +1,94 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <PropertyGroup>
4 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5 <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
6 <ProjectGuid>{968B4C73-280D-4FF5-9F73-DD3D10160C2E}</ProjectGuid>
7 <OutputType>Exe</OutputType>
8 <NoStandardLibraries>false</NoStandardLibraries>
9 <AssemblyName>OpenSim32</AssemblyName>
10 <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
11 <TargetFrameworkProfile>
12 </TargetFrameworkProfile>
13 <FileAlignment>512</FileAlignment>
14 <IsWebBootstrapper>false</IsWebBootstrapper>
15 <PublishUrl>publish\</PublishUrl>
16 <Install>true</Install>
17 <InstallFrom>Disk</InstallFrom>
18 <UpdateEnabled>false</UpdateEnabled>
19 <UpdateMode>Foreground</UpdateMode>
20 <UpdateInterval>7</UpdateInterval>
21 <UpdateIntervalUnits>Days</UpdateIntervalUnits>
22 <UpdatePeriodically>false</UpdatePeriodically>
23 <UpdateRequired>false</UpdateRequired>
24 <MapFileExtensions>true</MapFileExtensions>
25 <ApplicationRevision>0</ApplicationRevision>
26 <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
27 <UseApplicationTrust>false</UseApplicationTrust>
28 <BootstrapperEnabled>true</BootstrapperEnabled>
29 </PropertyGroup>
30 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
31 <DebugSymbols>true</DebugSymbols>
32 <DebugType>full</DebugType>
33 <Optimize>false</Optimize>
34 <OutputPath>bin\Debug\</OutputPath>
35 <DefineConstants>DEBUG;TRACE</DefineConstants>
36 <ErrorReport>prompt</ErrorReport>
37 <WarningLevel>4</WarningLevel>
38 <PlatformTarget>x86</PlatformTarget>
39 </PropertyGroup>
40 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
41 <DebugType>pdbonly</DebugType>
42 <Optimize>true</Optimize>
43 <OutputPath>..\..\..\bin\</OutputPath>
44 <DefineConstants>TRACE</DefineConstants>
45 <ErrorReport>prompt</ErrorReport>
46 <WarningLevel>4</WarningLevel>
47 <PlatformTarget>x86</PlatformTarget>
48 <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
49 <UseVSHostingProcess>false</UseVSHostingProcess>
50 </PropertyGroup>
51 <PropertyGroup>
52 <RootNamespace>OpenSim32</RootNamespace>
53 </PropertyGroup>
54 <ItemGroup>
55 <Reference Include="log4net">
56 <HintPath>..\..\..\bin\log4net.dll</HintPath>
57 </Reference>
58 <Reference Include="Microsoft.CSharp" />
59 <Reference Include="OpenSim">
60 <HintPath>..\..\..\bin\OpenSim.exe</HintPath>
61 </Reference>
62 <Reference Include="System" />
63 <Reference Include="System.Core" />
64 <Reference Include="System.Data" />
65 </ItemGroup>
66 <ItemGroup>
67 <Compile Include="Program.cs" />
68 <Compile Include="Properties\AssemblyInfo.cs" />
69 </ItemGroup>
70 <ItemGroup>
71 <None Include="app.config" />
72 </ItemGroup>
73 <ItemGroup>
74 <BootstrapperPackage Include=".NETFramework,Version=v4.0">
75 <Visible>False</Visible>
76 <ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
77 <Install>true</Install>
78 </BootstrapperPackage>
79 <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
80 <Visible>False</Visible>
81 <ProductName>.NET Framework 3.5 SP1</ProductName>
82 <Install>false</Install>
83 </BootstrapperPackage>
84 <BootstrapperPackage Include="Microsoft.Windows.Installer.4.5">
85 <Visible>False</Visible>
86 <ProductName>Windows Installer 4.5</ProductName>
87 <Install>true</Install>
88 </BootstrapperPackage>
89 </ItemGroup>
90 <Import Project="$(MSBuildToolsPath)\Microsoft.CSHARP.Targets" />
91 <ProjectExtensions>
92 <VisualStudio AllowExistingFolder="true" />
93 </ProjectExtensions>
94</Project> \ No newline at end of file
diff --git a/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj.user b/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj.user
new file mode 100644
index 0000000..2f100f7
--- /dev/null
+++ b/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.csproj.user
@@ -0,0 +1,16 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <PropertyGroup>
4 <PublishUrlHistory>publish\</PublishUrlHistory>
5 <InstallUrlHistory />
6 <SupportUrlHistory />
7 <UpdateUrlHistory />
8 <BootstrapperUrlHistory />
9 <ErrorReportUrlHistory />
10 <FallbackCulture>en-US</FallbackCulture>
11 <VerifyUploadedFiles>false</VerifyUploadedFiles>
12 </PropertyGroup>
13 <PropertyGroup>
14 <ReferencePath>C:\Avination\testsim\bin\</ReferencePath>
15 </PropertyGroup>
16</Project> \ No newline at end of file
diff --git a/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.sln b/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.sln
new file mode 100644
index 0000000..93522ea
--- /dev/null
+++ b/share/32BitLaunch/OpenSim.32BitLaunch/OpenSim32.sln
@@ -0,0 +1,22 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 14
4VisualStudioVersion = 14.0.25420.1
5MinimumVisualStudioVersion = 10.0.40219.1
6Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim32", "OpenSim32.csproj", "{968B4C73-280D-4FF5-9F73-DD3D10160C2E}"
7EndProject
8Global
9 GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 Debug|x86 = Debug|x86
11 Release|x86 = Release|x86
12 EndGlobalSection
13 GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 {968B4C73-280D-4FF5-9F73-DD3D10160C2E}.Debug|x86.ActiveCfg = Release|x86
15 {968B4C73-280D-4FF5-9F73-DD3D10160C2E}.Debug|x86.Build.0 = Release|x86
16 {968B4C73-280D-4FF5-9F73-DD3D10160C2E}.Release|x86.ActiveCfg = Release|x86
17 {968B4C73-280D-4FF5-9F73-DD3D10160C2E}.Release|x86.Build.0 = Release|x86
18 EndGlobalSection
19 GlobalSection(SolutionProperties) = preSolution
20 HideSolutionNode = FALSE
21 EndGlobalSection
22EndGlobal
diff --git a/share/32BitLaunch/OpenSim.32BitLaunch/Program.cs b/share/32BitLaunch/OpenSim.32BitLaunch/Program.cs
index 52806b8..ca6c359 100644
--- a/share/32BitLaunch/OpenSim.32BitLaunch/Program.cs
+++ b/share/32BitLaunch/OpenSim.32BitLaunch/Program.cs
@@ -27,33 +27,13 @@
27 27
28using System; 28using System;
29 29
30namespace OpenSim._32BitLaunch 30namespace OpenSim32
31{ 31{
32 class Program 32 class Program
33 { 33 {
34 static void Main(string[] args) 34 static void Main(string[] args)
35 { 35 {
36 log4net.Config.XmlConfigurator.Configure(); 36 global::OpenSim.Application.Main(args);
37
38 System.Console.WriteLine("32-bit OpenSim executor");
39 System.Console.WriteLine("-----------------------");
40 System.Console.WriteLine("");
41 System.Console.WriteLine("This application is compiled for 32-bit CPU and will run under WOW32 or similar.");
42 System.Console.WriteLine("All 64-bit incompatibilities should be gone.");
43 System.Console.WriteLine("");
44 System.Threading.Thread.Sleep(300);
45 try
46 {
47 global::OpenSim.Application.Main(args);
48 }
49 catch (Exception ex)
50 {
51 System.Console.WriteLine("OpenSim threw an exception:");
52 System.Console.WriteLine(ex.ToString());
53 System.Console.WriteLine("");
54 System.Console.WriteLine("Application will now terminate!");
55 System.Console.WriteLine("");
56 }
57 } 37 }
58 } 38 }
59} 39}
diff --git a/share/32BitLaunch/OpenSim.32BitLaunch/Properties/AssemblyInfo.cs b/share/32BitLaunch/OpenSim.32BitLaunch/Properties/AssemblyInfo.cs
index e81870f..bda1a79 100644
--- a/share/32BitLaunch/OpenSim.32BitLaunch/Properties/AssemblyInfo.cs
+++ b/share/32BitLaunch/OpenSim.32BitLaunch/Properties/AssemblyInfo.cs
@@ -32,11 +32,11 @@ using System.Runtime.InteropServices;
32// General information about an assembly is controlled through the following 32// General information about an assembly is controlled through the following
33// set of attributes. Change these attribute values to modify the information 33// set of attributes. Change these attribute values to modify the information
34// associated with an assembly. 34// associated with an assembly.
35[assembly: AssemblyTitle("OpenSim.32BitLaunch")] 35[assembly: AssemblyTitle("OpenSim32")]
36[assembly: AssemblyDescription("")] 36[assembly: AssemblyDescription("OpenSim 32Bit Launcher")]
37[assembly: AssemblyConfiguration("")] 37[assembly: AssemblyConfiguration("")]
38[assembly: AssemblyCompany("http://opensimulator.org")] 38[assembly: AssemblyCompany("http://opensimulator.org")]
39[assembly: AssemblyProduct("OpenSim.32BitLaunch")] 39[assembly: AssemblyProduct("OpenSim 32BitLauncher")]
40[assembly: AssemblyCopyright("Copyright (c) 2008")] 40[assembly: AssemblyCopyright("Copyright (c) 2008")]
41[assembly: AssemblyTrademark("")] 41[assembly: AssemblyTrademark("")]
42[assembly: AssemblyCulture("")] 42[assembly: AssemblyCulture("")]
@@ -59,5 +59,5 @@ using System.Runtime.InteropServices;
59// You can specify all the values or you can default the Build and Revision Numbers 59// You can specify all the values or you can default the Build and Revision Numbers
60// by using the '*' as shown below: 60// by using the '*' as shown below:
61// [assembly: AssemblyVersion("0.6.3.*")] 61// [assembly: AssemblyVersion("0.6.3.*")]
62[assembly: AssemblyVersion("0.6.3.*")] 62[assembly: AssemblyVersion("0.9.1.*")]
63[assembly: AssemblyFileVersion("1.0.0.0")] 63[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/share/32BitLaunch/OpenSim.32BitLaunch/app.config b/share/32BitLaunch/OpenSim.32BitLaunch/app.config
new file mode 100644
index 0000000..9224240
--- /dev/null
+++ b/share/32BitLaunch/OpenSim.32BitLaunch/app.config
@@ -0,0 +1,75 @@
1<configuration>
2 <configSections>
3 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
4 </configSections>
5 <startup>
6 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
7 </startup>
8 <runtime>
9 <loadFromRemoteSources enabled="true" />
10 </runtime>
11 <appSettings>
12 </appSettings>
13 <log4net>
14 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
15 <filter type="log4net.Filter.LoggerMatchFilter">
16 <loggerToMatch value="special"/>
17 <acceptOnMatch value="false"/>
18 </filter>
19 <layout type="log4net.Layout.PatternLayout">
20 <conversionPattern value="%date{HH:mm:ss} - %message" />
21 <!-- console log with milliseconds. Useful for debugging -->
22 <!-- <conversionPattern value="%date{HH:mm:ss.fff} - %message" /> -->
23 </layout>
24 </appender>
25
26 <!-- If you want automatic log-rolling then use RollingFileAppender instead of FileAppender:
27 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
28 <file value="log/OpenSim.log" />
29 <rollingStyle value="Date" />
30 <datePattern value="'.'yyyy-MM-dd"/>
31 ...
32-->
33
34 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
35 <file value="OpenSim.log" />
36 <appendToFile value="true" />
37 <filter type="log4net.Filter.LoggerMatchFilter">
38 <loggerToMatch value="special"/>
39 <acceptOnMatch value="false"/>
40 </filter>
41 <layout type="log4net.Layout.PatternLayout">
42 <conversionPattern value="%date %-5level - %logger %message%newline" />
43 </layout>
44 </appender>
45
46 <appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
47 <file value="OpenSimStats.log"/>
48 <appendToFile value="true" />
49 <layout type="log4net.Layout.PatternLayout">
50 <conversionPattern value="%date - %message%newline" />
51 </layout>
52 </appender>
53
54 <root>
55 <level value="DEBUG" />
56 <appender-ref ref="Console" />
57 <appender-ref ref="LogFileAppender" />
58 </root>
59
60 <!-- Independently control logging level for XEngine -->
61 <logger name="OpenSim.Region.ScriptEngine.XEngine">
62 <level value="INFO"/>
63 </logger>
64
65 <!-- Independently control logging level for per region module loading -->
66 <logger name="OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin">
67 <level value="INFO"/>
68 </logger>
69
70 <!-- used for stats recording -->
71 <logger name="special.StatsLogger">
72 <appender-ref ref="StatsLogFileAppender"/>
73 </logger>
74 </log4net>
75</configuration> \ No newline at end of file
diff --git a/share/32BitLaunch/README b/share/32BitLaunch/README
deleted file mode 100644
index 443cde0..0000000
--- a/share/32BitLaunch/README
+++ /dev/null
@@ -1,5 +0,0 @@
1Many issues appear in the support channels because of a misunderstanding of the use of these utilities. And through discussion at OpenSimulator Office Hours it was determined that these tools probably serve no useful purpose anymore.
2
3Instead of removing them immediately, we move them here, for a time, in case there is a useful purpose that has escaped us during conversations.
4
5If a need to compile these arises, the OpenSim.32BitLaunch and Robust.32BitLaunch directories may be placed under the ./OpenSim/Tools sources subdirectory, run the prebuild script and compile.
diff --git a/share/32BitLaunch/Robust.32BitLaunch.exe b/share/32BitLaunch/Robust.32BitLaunch.exe
deleted file mode 100755
index affedb4..0000000
--- a/share/32BitLaunch/Robust.32BitLaunch.exe
+++ /dev/null
Binary files differ
diff --git a/share/32BitLaunch/Robust.32BitLaunch/Program.cs b/share/32BitLaunch/Robust.32BitLaunch/Program.cs
index 490414c..ec5943e 100644
--- a/share/32BitLaunch/Robust.32BitLaunch/Program.cs
+++ b/share/32BitLaunch/Robust.32BitLaunch/Program.cs
@@ -26,35 +26,14 @@
26 */ 26 */
27 27
28using System; 28using System;
29using log4net;
30 29
31namespace Robust._32BitLaunch 30namespace Robust32
32{ 31{
33 class Program 32 class Program
34 { 33 {
35 static void Main(string[] args) 34 static void Main(string[] args)
36 { 35 {
37 log4net.Config.XmlConfigurator.Configure();
38
39 System.Console.WriteLine("32-bit OpenSim executor");
40 System.Console.WriteLine("-----------------------");
41 System.Console.WriteLine("");
42 System.Console.WriteLine("This application is compiled for 32-bit CPU and will run under WOW32 or similar.");
43 System.Console.WriteLine("All 64-bit incompatibilities should be gone.");
44 System.Console.WriteLine("");
45 System.Threading.Thread.Sleep(300);
46 try
47 {
48 global::OpenSim.Server.OpenSimServer.Main(args); 36 global::OpenSim.Server.OpenSimServer.Main(args);
49 }
50 catch (Exception ex)
51 {
52 System.Console.WriteLine("OpenSim threw an exception:");
53 System.Console.WriteLine(ex.ToString());
54 System.Console.WriteLine("");
55 System.Console.WriteLine("Application will now terminate!");
56 System.Console.WriteLine("");
57 }
58 } 37 }
59 } 38 }
60} 39}
diff --git a/share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj b/share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj
new file mode 100644
index 0000000..a6dae90
--- /dev/null
+++ b/share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj
@@ -0,0 +1,92 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <PropertyGroup>
4 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5 <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
6 <ProjectGuid>{A159489E-6552-4734-8EFA-8E031F63C7F6}</ProjectGuid>
7 <OutputType>Exe</OutputType>
8 <NoStandardLibraries>false</NoStandardLibraries>
9 <AssemblyName>Robust32</AssemblyName>
10 <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
11 <TargetFrameworkProfile>
12 </TargetFrameworkProfile>
13 <FileAlignment>512</FileAlignment>
14 <PublishUrl>publish\</PublishUrl>
15 <Install>true</Install>
16 <InstallFrom>Disk</InstallFrom>
17 <UpdateEnabled>false</UpdateEnabled>
18 <UpdateMode>Foreground</UpdateMode>
19 <UpdateInterval>7</UpdateInterval>
20 <UpdateIntervalUnits>Days</UpdateIntervalUnits>
21 <UpdatePeriodically>false</UpdatePeriodically>
22 <UpdateRequired>false</UpdateRequired>
23 <MapFileExtensions>true</MapFileExtensions>
24 <ApplicationRevision>0</ApplicationRevision>
25 <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
26 <IsWebBootstrapper>false</IsWebBootstrapper>
27 <UseApplicationTrust>false</UseApplicationTrust>
28 <BootstrapperEnabled>true</BootstrapperEnabled>
29 </PropertyGroup>
30 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
31 <DebugSymbols>true</DebugSymbols>
32 <DebugType>full</DebugType>
33 <Optimize>false</Optimize>
34 <OutputPath>..\..\..\bin\</OutputPath>
35 <DefineConstants>DEBUG;TRACE</DefineConstants>
36 <ErrorReport>prompt</ErrorReport>
37 <WarningLevel>4</WarningLevel>
38 <PlatformTarget>x86</PlatformTarget>
39 </PropertyGroup>
40 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
41 <DebugType>pdbonly</DebugType>
42 <Optimize>true</Optimize>
43 <OutputPath>..\..\..\bin\</OutputPath>
44 <DefineConstants>TRACE</DefineConstants>
45 <ErrorReport>prompt</ErrorReport>
46 <WarningLevel>4</WarningLevel>
47 <PlatformTarget>x86</PlatformTarget>
48 <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
49 <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
50 </PropertyGroup>
51 <PropertyGroup>
52 <RootNamespace>Robust32</RootNamespace>
53 </PropertyGroup>
54 <PropertyGroup>
55 <StartupObject>Robust32.Program</StartupObject>
56 </PropertyGroup>
57 <ItemGroup>
58 <Reference Include="Microsoft.CSharp" />
59 <Reference Include="Robust, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
60 <SpecificVersion>False</SpecificVersion>
61 <HintPath>..\..\..\bin\Robust.exe</HintPath>
62 </Reference>
63 </ItemGroup>
64 <ItemGroup>
65 <Compile Include="Program.cs" />
66 <Compile Include="Properties\AssemblyInfo.cs" />
67 </ItemGroup>
68 <ItemGroup>
69 <None Include="app.config" />
70 </ItemGroup>
71 <ItemGroup>
72 <BootstrapperPackage Include=".NETFramework,Version=v4.0">
73 <Visible>False</Visible>
74 <ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
75 <Install>true</Install>
76 </BootstrapperPackage>
77 <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
78 <Visible>False</Visible>
79 <ProductName>.NET Framework 3.5 SP1</ProductName>
80 <Install>false</Install>
81 </BootstrapperPackage>
82 <BootstrapperPackage Include="Microsoft.Windows.Installer.4.5">
83 <Visible>False</Visible>
84 <ProductName>Windows Installer 4.5</ProductName>
85 <Install>true</Install>
86 </BootstrapperPackage>
87 </ItemGroup>
88 <Import Project="$(MSBuildToolsPath)\Microsoft.CSHARP.Targets" />
89 <ProjectExtensions>
90 <VisualStudio AllowExistingFolder="true" />
91 </ProjectExtensions>
92</Project> \ No newline at end of file
diff --git a/share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj.user b/share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj.user
new file mode 100644
index 0000000..8221333
--- /dev/null
+++ b/share/32BitLaunch/Robust.32BitLaunch/Robust32.csproj.user
@@ -0,0 +1,13 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <PropertyGroup>
4 <PublishUrlHistory>publish\</PublishUrlHistory>
5 <InstallUrlHistory />
6 <SupportUrlHistory />
7 <UpdateUrlHistory />
8 <BootstrapperUrlHistory />
9 <ErrorReportUrlHistory />
10 <FallbackCulture>en-US</FallbackCulture>
11 <VerifyUploadedFiles>false</VerifyUploadedFiles>
12 </PropertyGroup>
13</Project> \ No newline at end of file
diff --git a/share/32BitLaunch/Robust.32BitLaunch/Robust32.sln b/share/32BitLaunch/Robust.32BitLaunch/Robust32.sln
new file mode 100644
index 0000000..368b3ca
--- /dev/null
+++ b/share/32BitLaunch/Robust.32BitLaunch/Robust32.sln
@@ -0,0 +1,22 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 14
4VisualStudioVersion = 14.0.25420.1
5MinimumVisualStudioVersion = 10.0.40219.1
6Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Robust32", "Robust32.csproj", "{A159489E-6552-4734-8EFA-8E031F63C7F6}"
7EndProject
8Global
9 GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 Debug|x86 = Debug|x86
11 Release|x86 = Release|x86
12 EndGlobalSection
13 GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 {A159489E-6552-4734-8EFA-8E031F63C7F6}.Debug|x86.ActiveCfg = Debug|x86
15 {A159489E-6552-4734-8EFA-8E031F63C7F6}.Debug|x86.Build.0 = Debug|x86
16 {A159489E-6552-4734-8EFA-8E031F63C7F6}.Release|x86.ActiveCfg = Release|x86
17 {A159489E-6552-4734-8EFA-8E031F63C7F6}.Release|x86.Build.0 = Release|x86
18 EndGlobalSection
19 GlobalSection(SolutionProperties) = preSolution
20 HideSolutionNode = FALSE
21 EndGlobalSection
22EndGlobal
diff --git a/share/32BitLaunch/Robust.32BitLaunch/app.config b/share/32BitLaunch/Robust.32BitLaunch/app.config
new file mode 100644
index 0000000..ca3ee0e
--- /dev/null
+++ b/share/32BitLaunch/Robust.32BitLaunch/app.config
@@ -0,0 +1,72 @@
1<?xml version="1.0" encoding="utf-8"?>
2<configuration>
3 <configSections>
4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
5 </configSections>
6 <startup>
7 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
8 </startup>
9 <runtime>
10 <loadFromRemoteSources enabled="true" />
11 </runtime>
12 <appSettings>
13 <add key="ClientSettingsProvider.ServiceUri" value="" />
14 </appSettings>
15 <log4net>
16 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
17 <filter type="log4net.Filter.LoggerMatchFilter">
18 <loggerToMatch value="special" />
19 <acceptOnMatch value="false" />
20 </filter>
21 <layout type="log4net.Layout.PatternLayout">
22 <conversionPattern value="%date{HH:mm:ss} - %message" />
23 </layout>
24 </appender>
25 <!-- If you want automatic log-rolling then use RollingFileAppender instead of FileAppender:
26 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
27 <file value="log/Robust.log" />
28 <rollingStyle value="Date" />
29 <datePattern value="'.'yyyy-MM-dd"/>
30 ...
31-->
32 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
33 <file value="Robust.log" />
34 <appendToFile value="true" />
35 <filter type="log4net.Filter.LoggerMatchFilter">
36 <loggerToMatch value="special" />
37 <acceptOnMatch value="false" />
38 </filter>
39 <layout type="log4net.Layout.PatternLayout">
40 <conversionPattern value="%date %-5level - %logger %message%newline" />
41 </layout>
42 </appender>
43 <appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
44 <file value="RobustStats.log" />
45 <appendToFile value="true" />
46 <layout type="log4net.Layout.PatternLayout">
47 <conversionPattern value="%date - %message%newline" />
48 </layout>
49 </appender>
50 <root>
51 <level value="DEBUG" />
52 <appender-ref ref="Console" />
53 <appender-ref ref="LogFileAppender" />
54 </root>
55 <!-- used for stats recording -->
56 <logger name="special.StatsLogger">
57 <appender-ref ref="StatsLogFileAppender" />
58 </logger>
59 </log4net>
60 <system.web>
61 <membership defaultProvider="ClientAuthenticationMembershipProvider">
62 <providers>
63 <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
64 </providers>
65 </membership>
66 <roleManager defaultProvider="ClientRoleProvider" enabled="true">
67 <providers>
68 <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
69 </providers>
70 </roleManager>
71 </system.web>
72</configuration> \ No newline at end of file