diff --git a/.nant/local.include b/.nant/local.include
index 4fa3e4df4b..7d1681011b 100644
--- a/.nant/local.include
+++ b/.nant/local.include
@@ -2,13 +2,19 @@
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 0dd01aff26..6a3135eb7d 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -247,7 +247,7 @@ namespace OpenSim.Framework.Servers
string reportFormat = "{0,6} {1,35} {2,16} {3,13} {4,10} {5,30}";
StringBuilder sb = new StringBuilder();
- Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreads();
+ Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreadsInfo();
sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine);
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
index 2206febdb1..0062d4ef15 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
@@ -65,6 +65,7 @@ namespace OpenSim.Framework.Servers.HttpServer
String.Format("PollServiceWorkerThread{0}", i),
ThreadPriority.Normal,
false,
+ true,
int.MaxValue);
}
@@ -73,6 +74,7 @@ namespace OpenSim.Framework.Servers.HttpServer
"PollServiceWatcherThread",
ThreadPriority.Normal,
false,
+ true,
1000 * 60 * 10);
}
diff --git a/OpenSim/Framework/Watchdog.cs b/OpenSim/Framework/Watchdog.cs
index 2dd6ebe49a..e93e50e2ca 100644
--- a/OpenSim/Framework/Watchdog.cs
+++ b/OpenSim/Framework/Watchdog.cs
@@ -72,6 +72,11 @@ namespace OpenSim.Framework
///
public bool IsTimedOut { get; set; }
+ ///
+ /// Will this thread trigger the alarm function if it has timed out?
+ ///
+ public bool AlarmIfTimeout { get; set; }
+
public ThreadWatchdogInfo(Thread thread, int timeout)
{
Thread = thread;
@@ -112,12 +117,13 @@ namespace OpenSim.Framework
/// The method that will be executed in a new thread
/// A name to give to the new thread
/// Priority to run the thread at
- /// True to run this thread as a background
- /// thread, otherwise false
+ /// True to run this thread as a background thread, otherwise false
+ /// Trigger an alarm function is we have timed out
/// The newly created Thread object
- public static Thread StartThread(ThreadStart start, string name, ThreadPriority priority, bool isBackground)
+ public static Thread StartThread(
+ ThreadStart start, string name, ThreadPriority priority, bool isBackground, bool alarmIfTimeout)
{
- return StartThread(start, name, priority, isBackground, WATCHDOG_TIMEOUT_MS);
+ return StartThread(start, name, priority, isBackground, alarmIfTimeout, WATCHDOG_TIMEOUT_MS);
}
///
@@ -128,21 +134,21 @@ namespace OpenSim.Framework
/// Priority to run the thread at
/// True to run this thread as a background
/// thread, otherwise false
- ///
- /// Number of milliseconds to wait until we issue a warning about timeout.
- ///
+ /// Trigger an alarm function is we have timed out
+ /// Number of milliseconds to wait until we issue a warning about timeout.
/// The newly created Thread object
public static Thread StartThread(
- ThreadStart start, string name, ThreadPriority priority, bool isBackground, int timeout)
+ ThreadStart start, string name, ThreadPriority priority, bool isBackground, bool alarmIfTimeout, int timeout)
{
Thread thread = new Thread(start);
thread.Name = name;
thread.Priority = priority;
thread.IsBackground = isBackground;
- ThreadWatchdogInfo twi = new ThreadWatchdogInfo(thread, timeout);
+ ThreadWatchdogInfo twi = new ThreadWatchdogInfo(thread, timeout) { AlarmIfTimeout = alarmIfTimeout };
- m_log.Debug("[WATCHDOG]: Started tracking thread \"" + twi.Thread.Name + "\" (ID " + twi.Thread.ManagedThreadId + ")");
+ m_log.DebugFormat(
+ "[WATCHDOG]: Started tracking thread {0}, ID {1}", twi.Thread.Name, twi.Thread.ManagedThreadId);
lock (m_threads)
m_threads.Add(twi.Thread.ManagedThreadId, twi);
@@ -224,19 +230,39 @@ namespace OpenSim.Framework
/// Get currently watched threads for diagnostic purposes
///
///
- public static ThreadWatchdogInfo[] GetThreads()
+ public static ThreadWatchdogInfo[] GetThreadsInfo()
{
lock (m_threads)
return m_threads.Values.ToArray();
}
+ ///
+ /// Return the current thread's watchdog info.
+ ///
+ /// The watchdog info. null if the thread isn't being monitored.
+ public static ThreadWatchdogInfo GetCurrentThreadInfo()
+ {
+ lock (m_threads)
+ {
+ if (m_threads.ContainsKey(Thread.CurrentThread.ManagedThreadId))
+ return m_threads[Thread.CurrentThread.ManagedThreadId];
+ }
+
+ return null;
+ }
+
+ ///
+ /// Check watched threads. Fire alarm if appropriate.
+ ///
+ ///
+ ///
private static void WatchdogTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
{
WatchdogTimeout callback = OnWatchdogTimeout;
if (callback != null)
{
- ThreadWatchdogInfo timedOut = null;
+ List callbackInfos = null;
lock (m_threads)
{
@@ -246,21 +272,31 @@ namespace OpenSim.Framework
{
if (threadInfo.Thread.ThreadState == ThreadState.Stopped)
{
- timedOut = threadInfo;
RemoveThread(threadInfo.Thread.ManagedThreadId);
- break;
+
+ if (callbackInfos == null)
+ callbackInfos = new List();
+
+ callbackInfos.Add(threadInfo);
}
else if (!threadInfo.IsTimedOut && now - threadInfo.LastTick >= threadInfo.Timeout)
{
threadInfo.IsTimedOut = true;
- timedOut = threadInfo;
- break;
+
+ if (threadInfo.AlarmIfTimeout)
+ {
+ if (callbackInfos == null)
+ callbackInfos = new List();
+
+ callbackInfos.Add(threadInfo);
+ }
}
}
}
- if (timedOut != null)
- callback(timedOut.Thread, timedOut.LastTick);
+ if (callbackInfos != null)
+ foreach (ThreadWatchdogInfo callbackInfo in callbackInfos)
+ callback(callbackInfo.Thread, callbackInfo.LastTick);
}
m_watchdogTimer.Start();
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 1e22fcc395..fb6b11e209 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -244,8 +244,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
base.Start(m_recvBufferSize, m_asyncPacketHandling);
// Start the packet processing threads
- Watchdog.StartThread(IncomingPacketHandler, "Incoming Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false);
- Watchdog.StartThread(OutgoingPacketHandler, "Outgoing Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false);
+ Watchdog.StartThread(
+ IncomingPacketHandler, "Incoming Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false, true);
+ Watchdog.StartThread(
+ OutgoingPacketHandler, "Outgoing Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false, true);
+
m_elapsedMSSinceLastStatReport = Environment.TickCount;
}
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index a81f36c996..650069a357 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -349,8 +349,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
{
try
{
- m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME.");
-
Dictionary options = new Dictionary();
OptionSet optionSet = new OptionSet().Add("m|merge", delegate (string v) { options["merge"] = v != null; });
@@ -412,7 +410,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
return;
}
- m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME.");
if (options.ContainsKey("home"))
m_log.WarnFormat("[INVENTORY ARCHIVER]: Please be aware that inventory archives with creator information are not compatible with OpenSim 0.7.0.2 and earlier. Do not use the -home option if you want to produce a compatible IAR");
diff --git a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
index f3677390a9..a6e2548406 100644
--- a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
+++ b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
@@ -1210,7 +1210,7 @@ namespace OpenSim.Region.CoreModules.InterGrid
if (homeScene.TryGetScenePresence(avatarId,out avatar))
{
KillAUser ku = new KillAUser(avatar,mod);
- Watchdog.StartThread(ku.ShutdownNoLogout, "OGPShutdown", ThreadPriority.Normal, true);
+ Watchdog.StartThread(ku.ShutdownNoLogout, "OGPShutdown", ThreadPriority.Normal, true, true);
}
}
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 1c503aa8c3..f6d4b401c1 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -94,8 +94,11 @@ namespace OpenSim.Region.CoreModules.World.Land
// caches ExtendedLandData
private Cache parcelInfoCache;
- private Dictionary forcedPosition =
- new Dictionary();
+
+ ///
+ /// Record positions that avatar's are currently being forced to move to due to parcel entry restrictions.
+ ///
+ private Dictionary forcedPosition = new Dictionary();
#region INonSharedRegionModule Members
@@ -224,22 +227,34 @@ namespace OpenSim.Region.CoreModules.World.Land
//When the avatar walks into a ban line on the ground, it prevents getting stuck
agentData.ControlFlags = (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
-
//Make sure we stop if they get about to the right place to prevent yoyo and prevents getting stuck on banlines
if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition[remoteClient.AgentId]) < .2)
{
- Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition[remoteClient.AgentId], clientAvatar.AbsolutePosition));
+// m_log.DebugFormat(
+// "[LAND MANAGEMENT MODULE]: Stopping force position of {0} because {1} is close enough to {2}",
+// clientAvatar.Name, clientAvatar.AbsolutePosition, forcedPosition[remoteClient.AgentId]);
+
forcedPosition.Remove(remoteClient.AgentId);
}
//if we are far away, teleport
else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition[remoteClient.AgentId]) > 3)
{
- Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition[remoteClient.AgentId], clientAvatar.AbsolutePosition));
- clientAvatar.Teleport(forcedPosition[remoteClient.AgentId]);
+ Vector3 forcePosition = forcedPosition[remoteClient.AgentId];
+// m_log.DebugFormat(
+// "[LAND MANAGEMENT MODULE]: Teleporting out {0} because {1} is too far from avatar position {2}",
+// clientAvatar.Name, clientAvatar.AbsolutePosition, forcePosition);
+
+ m_scene.RequestTeleportLocation(remoteClient, m_scene.RegionInfo.RegionHandle,
+ forcePosition, clientAvatar.Lookat, (uint)Constants.TeleportFlags.ForceRedirect);
+
forcedPosition.Remove(remoteClient.AgentId);
}
else
{
+// m_log.DebugFormat(
+// "[LAND MANAGEMENT MODULE]: Forcing {0} from {1} to {2}",
+// clientAvatar.Name, clientAvatar.AbsolutePosition, forcedPosition[remoteClient.AgentId]);
+
//Forces them toward the forced position we want if they aren't there yet
agentData.UseClientAgentPosition = true;
agentData.ClientAgentPosition = forcedPosition[remoteClient.AgentId];
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index b315d2c003..74b047be14 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -351,6 +351,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
process,
string.Format("MapItemRequestThread ({0})", m_scene.RegionInfo.RegionName),
ThreadPriority.BelowNormal,
+ true,
true);
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 61878031d5..9bca654d12 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1140,7 +1140,7 @@ namespace OpenSim.Region.Framework.Scenes
HeartbeatThread
= Watchdog.StartThread(
- Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false);
+ Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false);
}
///
@@ -1178,6 +1178,13 @@ namespace OpenSim.Region.Framework.Scenes
try
{
m_eventManager.TriggerOnRegionStarted(this);
+
+ // The first frame can take a very long time due to physics actors being added on startup. Therefore,
+ // don't turn on the watchdog alarm for this thread until the second frame, in order to prevent false
+ // alarms for scenes with many objects.
+ Update();
+ Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true;
+
while (!shuttingdown)
Update();
@@ -1206,7 +1213,7 @@ namespace OpenSim.Region.Framework.Scenes
++Frame;
-// m_log.DebugFormat("[SCENE]: Processing frame {0}", Frame);
+// m_log.DebugFormat("[SCENE]: Processing frame {0} in {1}", Frame, RegionInfo.RegionName);
try
{
@@ -1361,26 +1368,10 @@ namespace OpenSim.Region.Framework.Scenes
{
throw;
}
- catch (AccessViolationException e)
- {
- m_log.ErrorFormat(
- "[REGION]: Failed on region {0} with exception {1}{2}",
- RegionInfo.RegionName, e.Message, e.StackTrace);
- }
- //catch (NullReferenceException e)
- //{
- // m_log.Error("[REGION]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName);
- //}
- catch (InvalidOperationException e)
- {
- m_log.ErrorFormat(
- "[REGION]: Failed on region {0} with exception {1}{2}",
- RegionInfo.RegionName, e.Message, e.StackTrace);
- }
catch (Exception e)
{
m_log.ErrorFormat(
- "[REGION]: Failed on region {0} with exception {1}{2}",
+ "[SCENE]: Failed on region {0} with exception {1}{2}",
RegionInfo.RegionName, e.Message, e.StackTrace);
}
@@ -1418,7 +1409,6 @@ namespace OpenSim.Region.Framework.Scenes
entry.checkAtTargets();
}
-
///
/// Send out simstats data to all clients
///
@@ -4699,7 +4689,10 @@ namespace OpenSim.Region.Framework.Scenes
Vector3? nearestPoint = GetNearestPointInParcelAlongDirectionFromPoint(avatar.AbsolutePosition, dir, nearestParcel);
if (nearestPoint != null)
{
- Debug.WriteLine("Found a sane previous position based on velocity, sending them to: " + nearestPoint.ToString());
+// m_log.DebugFormat(
+// "[SCENE]: Found a sane previous position based on velocity for {0}, sending them to {1} in {2}",
+// avatar.Name, nearestPoint, nearestParcel.LandData.Name);
+
return nearestPoint.Value;
}
@@ -4709,12 +4702,16 @@ namespace OpenSim.Region.Framework.Scenes
nearestPoint = GetNearestPointInParcelAlongDirectionFromPoint(avatar.AbsolutePosition, dir, nearestParcel);
if (nearestPoint != null)
{
- Debug.WriteLine("They had a zero velocity, sending them to: " + nearestPoint.ToString());
+// m_log.DebugFormat(
+// "[SCENE]: {0} had a zero velocity, sending them to {1}", avatar.Name, nearestPoint);
+
return nearestPoint.Value;
}
- //Ultimate backup if we have no idea where they are
- Debug.WriteLine("Have no idea where they are, sending them to: " + avatar.lastKnownAllowedPosition.ToString());
+ //Ultimate backup if we have no idea where they are
+// m_log.DebugFormat(
+// "[SCENE]: No idea where {0} is, sending them to {1}", avatar.Name, avatar.lastKnownAllowedPosition);
+
return avatar.lastKnownAllowedPosition;
}
@@ -5120,7 +5117,7 @@ namespace OpenSim.Region.Framework.Scenes
// presence.Name, presence.AbsolutePosition, presence.MoveToPositionTarget);
Vector3 agent_control_v3 = new Vector3();
- presence.HandleMoveToTargetUpdate(ref agent_control_v3);
+ presence.HandleMoveToTargetUpdate(1, ref agent_control_v3);
presence.AddNewMovement(agent_control_v3);
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 19c9745f4f..4d98f00458 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -156,8 +156,8 @@ namespace OpenSim.Region.Framework.Scenes
// that the region position is cached or performance will degrade
Utils.LongToUInts(regionHandle, out x, out y);
GridRegion dest = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y);
- bool v = true;
- if (! simulatorList.Contains(dest.ServerURI))
+// bool v = true;
+ if (!simulatorList.Contains(dest.ServerURI))
{
// we havent seen this simulator before, add it to the list
// and send it an update
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 9cfdf9fe9f..40c8d0600a 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1048,7 +1048,7 @@ namespace OpenSim.Region.Framework.Scenes
}
///
- ///
+ /// Do not call this directly. Call Scene.RequestTeleportLocation() instead.
///
///
public void Teleport(Vector3 pos)
@@ -1522,7 +1522,10 @@ namespace OpenSim.Region.Framework.Scenes
}
else if (bAllowUpdateMoveToPosition)
{
- if (HandleMoveToTargetUpdate(ref agent_control_v3))
+ // The UseClientAgentPosition is set if parcel ban is forcing the avatar to move to a
+ // certain position. It's only check for tolerance on returning to that position is 0.2
+ // rather than 1, at which point it removes its force target.
+ if (HandleMoveToTargetUpdate(agentData.UseClientAgentPosition ? 0.2 : 1, ref agent_control_v3))
update_movementflag = true;
}
}
@@ -1584,7 +1587,7 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Cumulative agent movement that this method will update.
/// True if movement has been updated in some way. False otherwise.
- public bool HandleMoveToTargetUpdate(ref Vector3 agent_control_v3)
+ public bool HandleMoveToTargetUpdate(double tolerance, ref Vector3 agent_control_v3)
{
// m_log.DebugFormat("[SCENE PRESENCE]: Called HandleMoveToTargetUpdate() for {0}", Name);
@@ -1601,7 +1604,7 @@ namespace OpenSim.Region.Framework.Scenes
// Name, AbsolutePosition, MoveToPositionTarget, distanceToTarget);
// Check the error term of the current position in relation to the target position
- if (distanceToTarget <= 1)
+ if (distanceToTarget <= tolerance)
{
// We are close enough to the target
AbsolutePosition = MoveToPositionTarget;
@@ -1777,7 +1780,7 @@ namespace OpenSim.Region.Framework.Scenes
// m_log.DebugFormat("[SCENE PRESENCE]: Body rot for {0} set to {1}", Name, Rotation);
Vector3 agent_control_v3 = new Vector3();
- HandleMoveToTargetUpdate(ref agent_control_v3);
+ HandleMoveToTargetUpdate(1, ref agent_control_v3);
AddNewMovement(agent_control_v3);
}
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index c928af7892..d3c96e27ae 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -70,7 +70,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
m_client = client;
m_scene = scene;
- Watchdog.StartThread(InternalLoop, "IRCClientView", ThreadPriority.Normal, false);
+ Watchdog.StartThread(InternalLoop, "IRCClientView", ThreadPriority.Normal, false, true);
}
private void SendServerCommand(string command)
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs
index eb390268d7..a7c5020eb6 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs
@@ -57,7 +57,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
m_listener.Start(50);
- Watchdog.StartThread(ListenLoop, "IRCServer", ThreadPriority.Normal, false);
+ Watchdog.StartThread(ListenLoop, "IRCServer", ThreadPriority.Normal, false, true);
m_baseScene = baseScene;
}
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 75364b73fc..97890ee398 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -1474,6 +1474,8 @@ Console.WriteLine("CreateGeom:");
///
private void changeadd()
{
+// m_log.DebugFormat("[ODE PRIM]: Adding prim {0}", Name);
+
int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position);
IntPtr targetspace = _parent_scene.calculateSpaceForGeom(_position);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
index ee32755a0b..14edde41d4 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
@@ -137,7 +137,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (cmdHandlerThread == null)
{
// Start the thread that will be doing the work
- cmdHandlerThread = Watchdog.StartThread(CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true);
+ cmdHandlerThread
+ = Watchdog.StartThread(
+ CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true);
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 61a6907ed3..c5392b590a 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -6376,16 +6376,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
}
- public void llSitTarget(LSL_Vector offset, LSL_Rotation rot)
+ protected void SitTarget(SceneObjectPart part, LSL_Vector offset, LSL_Rotation rot)
{
- m_host.AddScriptLPS(1);
// LSL quaternions can normalize to 0, normal Quaternions can't.
if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0)
rot.z = 1; // ZERO_ROTATION = 0,0,0,1
- m_host.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z);
- m_host.SitTargetOrientation = Rot2Quaternion(rot);
- m_host.ParentGroup.HasGroupChanged = true;
+ part.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z);
+ part.SitTargetOrientation = Rot2Quaternion(rot);
+ part.ParentGroup.HasGroupChanged = true;
+ }
+
+ public void llSitTarget(LSL_Vector offset, LSL_Rotation rot)
+ {
+ m_host.AddScriptLPS(1);
+ SitTarget(m_host, offset, rot);
+ }
+
+ public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot)
+ {
+ m_host.AddScriptLPS(1);
+ if (link == ScriptBaseClass.LINK_ROOT)
+ SitTarget(m_host.ParentGroup.RootPart, offset, rot);
+ else if (link == ScriptBaseClass.LINK_THIS)
+ SitTarget(m_host, offset, rot);
+ else
+ {
+ SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
+ if (null != part)
+ {
+ SitTarget(part, offset, rot);
+ }
+ }
}
public LSL_String llAvatarOnSitTarget()
@@ -7047,10 +7069,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
shapeBlock.PathScaleX = 100;
shapeBlock.PathScaleY = 150;
- if (type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER &&
- type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE &&
- type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE &&
- type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS)
+ int flag = type & (ScriptBaseClass.PRIM_SCULPT_FLAG_INVERT | ScriptBaseClass.PRIM_SCULPT_FLAG_MIRROR);
+
+ if (type != (ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER | flag) &&
+ type != (ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE | flag) &&
+ type != (ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE | flag) &&
+ type != (ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS | flag))
{
// default
type = (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE;
@@ -8151,23 +8175,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
m_host.AddScriptLPS(1);
ScriptSleep(1000);
+ return GetPrimMediaParams(m_host, face, rules);
+ }
+ public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
+ {
+ m_host.AddScriptLPS(1);
+ ScriptSleep(1000);
+ if (link == ScriptBaseClass.LINK_ROOT)
+ return GetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules);
+ else if (link == ScriptBaseClass.LINK_THIS)
+ return GetPrimMediaParams(m_host, face, rules);
+ else
+ {
+ SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
+ if (null != part)
+ return GetPrimMediaParams(part, face, rules);
+ }
+
+ return new LSL_List();
+ }
+
+ private LSL_List GetPrimMediaParams(SceneObjectPart part, int face, LSL_List rules)
+ {
// LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid
// TODO: Need to correctly handle case where a face has no media (which gives back an empty list).
// Assuming silently fail means give back an empty list. Ideally, need to check this.
- if (face < 0 || face > m_host.GetNumberOfSides() - 1)
+ if (face < 0 || face > part.GetNumberOfSides() - 1)
return new LSL_List();
- return GetPrimMediaParams(face, rules);
- }
-
- private LSL_List GetPrimMediaParams(int face, LSL_List rules)
- {
IMoapModule module = m_ScriptEngine.World.RequestModuleInterface();
if (null == module)
- throw new Exception("Media on a prim functions not available");
+ return new LSL_List();
- MediaEntry me = module.GetMediaEntry(m_host, face);
+ MediaEntry me = module.GetMediaEntry(part, face);
// As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams
if (null == me)
@@ -8249,33 +8290,52 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL:
res.Add(new LSL_Integer((int)me.ControlPermissions));
break;
+
+ default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS;
}
}
return res;
}
- public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules)
+ public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules)
{
m_host.AddScriptLPS(1);
ScriptSleep(1000);
+ return SetPrimMediaParams(m_host, face, rules);
+ }
+ public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
+ {
+ m_host.AddScriptLPS(1);
+ ScriptSleep(1000);
+ if (link == ScriptBaseClass.LINK_ROOT)
+ return SetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules);
+ else if (link == ScriptBaseClass.LINK_THIS)
+ return SetPrimMediaParams(m_host, face, rules);
+ else
+ {
+ SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
+ if (null != part)
+ return SetPrimMediaParams(part, face, rules);
+ }
+
+ return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
+ }
+
+ private LSL_Integer SetPrimMediaParams(SceneObjectPart part, LSL_Integer face, LSL_List rules)
+ {
// LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid
// Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this.
// Don't perform the media check directly
- if (face < 0 || face > m_host.GetNumberOfSides() - 1)
- return ScriptBaseClass.LSL_STATUS_OK;
+ if (face < 0 || face > part.GetNumberOfSides() - 1)
+ return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
- return SetPrimMediaParams(face, rules);
- }
-
- private LSL_Integer SetPrimMediaParams(int face, LSL_List rules)
- {
IMoapModule module = m_ScriptEngine.World.RequestModuleInterface();
if (null == module)
- throw new Exception("Media on a prim functions not available");
+ return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED;
- MediaEntry me = module.GetMediaEntry(m_host, face);
+ MediaEntry me = module.GetMediaEntry(part, face);
if (null == me)
me = new MediaEntry();
@@ -8354,10 +8414,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL:
me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++);
break;
+
+ default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS;
}
}
- module.SetMediaEntry(m_host, face, me);
+ module.SetMediaEntry(part, face, me);
return ScriptBaseClass.LSL_STATUS_OK;
}
@@ -8366,18 +8428,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
m_host.AddScriptLPS(1);
ScriptSleep(1000);
+ return ClearPrimMedia(m_host, face);
+ }
+ public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face)
+ {
+ m_host.AddScriptLPS(1);
+ ScriptSleep(1000);
+ if (link == ScriptBaseClass.LINK_ROOT)
+ return ClearPrimMedia(m_host.ParentGroup.RootPart, face);
+ else if (link == ScriptBaseClass.LINK_THIS)
+ return ClearPrimMedia(m_host, face);
+ else
+ {
+ SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
+ if (null != part)
+ return ClearPrimMedia(part, face);
+ }
+
+ return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
+ }
+
+ private LSL_Integer ClearPrimMedia(SceneObjectPart part, LSL_Integer face)
+ {
// LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid
// Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this.
// FIXME: Don't perform the media check directly
- if (face < 0 || face > m_host.GetNumberOfSides() - 1)
- return ScriptBaseClass.LSL_STATUS_OK;
+ if (face < 0 || face > part.GetNumberOfSides() - 1)
+ return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
IMoapModule module = m_ScriptEngine.World.RequestModuleInterface();
if (null == module)
- throw new Exception("Media on a prim functions not available");
+ return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED;
- module.ClearMediaEntry(m_host, face);
+ module.ClearMediaEntry(part, face);
return ScriptBaseClass.LSL_STATUS_OK;
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index c55e2ae4e7..ff1f5fddff 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2740,7 +2740,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed");
m_host.AddScriptLPS(1);
ScenePresence avatar = World.GetScenePresence(new UUID(UUID));
- avatar.SpeedModifier = (float)SpeedModifier;
+
+ if (avatar != null)
+ avatar.SpeedModifier = (float)SpeedModifier;
}
public void osKickAvatar(string FirstName,string SurName,string alert)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
index 6106a653b5..0f53bc3210 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
@@ -64,6 +64,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options);
LSL_Integer llCeil(double f);
void llClearCameraParams();
+ LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face);
LSL_Integer llClearPrimMedia(LSL_Integer face);
void llCloseRemoteDataChannel(string channel);
LSL_Float llCloud(LSL_Vector offset);
@@ -139,7 +140,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_String llGetLinkName(int linknum);
LSL_Integer llGetLinkNumber();
LSL_Integer llGetLinkNumberOfSides(int link);
- LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules);
+ LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules);
+ LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules);
LSL_Integer llGetListEntryType(LSL_List src, int index);
LSL_Integer llGetListLength(LSL_List src);
LSL_Vector llGetLocalPos();
@@ -218,6 +220,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_String llGetDisplayName(string id);
LSL_String llRequestDisplayName(string id);
void llLinkParticleSystem(int linknum, LSL_List rules);
+ void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot);
LSL_String llList2CSV(LSL_List src);
LSL_Float llList2Float(LSL_List src, int index);
LSL_Integer llList2Integer(LSL_List src, int index);
@@ -334,6 +337,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
void llSetInventoryPermMask(string item, int mask, int value);
void llSetLinkAlpha(int linknumber, double alpha, int face);
void llSetLinkColor(int linknumber, LSL_Vector color, int face);
+ LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules);
void llSetLinkPrimitiveParams(int linknumber, LSL_List rules);
void llSetLinkTexture(int linknumber, string texture, int face);
void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate);
@@ -344,7 +348,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
void llSetParcelMusicURL(string url);
void llSetPayPrice(int price, LSL_List quick_pay_buttons);
void llSetPos(LSL_Vector pos);
- LSL_Integer llSetPrimMediaParams(int face, LSL_List rules);
+ LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules);
void llSetPrimitiveParams(LSL_List rules);
void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules);
void llSetPrimURL(string url);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
index bb498b500b..5a53e15882 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
@@ -378,6 +378,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public const int PRIM_SCULPT_TYPE_TORUS = 2;
public const int PRIM_SCULPT_TYPE_PLANE = 3;
public const int PRIM_SCULPT_TYPE_CYLINDER = 4;
+ public const int PRIM_SCULPT_FLAG_INVERT = 64;
+ public const int PRIM_SCULPT_FLAG_MIRROR = 128;
public const int MASK_BASE = 0;
public const int MASK_OWNER = 1;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
index 83550a5933..f8e3c367bc 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
@@ -1688,6 +1688,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_LSL_Functions.llSitTarget(offset, rot);
}
+ public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot)
+ {
+ m_LSL_Functions.llLinkSitTarget(link, offset, rot);
+ }
+
public void llSleep(double sec)
{
m_LSL_Functions.llSleep(sec);
@@ -1882,17 +1887,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{
return m_LSL_Functions.llGetPrimMediaParams(face, rules);
}
-
+
+ public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
+ {
+ return m_LSL_Functions.llGetLinkMedia(link, face, rules);
+ }
+
public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules)
{
return m_LSL_Functions.llSetPrimMediaParams(face, rules);
}
-
+
+ public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
+ {
+ return m_LSL_Functions.llSetLinkMedia(link, face, rules);
+ }
+
public LSL_Integer llClearPrimMedia(LSL_Integer face)
{
return m_LSL_Functions.llClearPrimMedia(face);
}
+ public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face)
+ {
+ return m_LSL_Functions.llClearLinkMedia(link, face);
+ }
+
public void print(string str)
{
m_LSL_Functions.print(str);
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs
index f627e37d8f..ad272f7839 100644
--- a/OpenSim/Region/UserStatistics/WebStatsModule.cs
+++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs
@@ -83,6 +83,9 @@ namespace OpenSim.Region.UserStatistics
{
if (m_scenes.Count == 0)
{
+ if (Util.IsWindows())
+ Util.LoadArchSpecificWindowsDll("sqlite3.dll");
+
//IConfig startupConfig = config.Configs["Startup"];
dbConn = new SqliteConnection("URI=file:LocalUserStatistics.db,version=3");
diff --git a/bin/BulletDotNET.dll b/bin/BulletDotNET.dll
deleted file mode 100755
index 40c4348472..0000000000
Binary files a/bin/BulletDotNET.dll and /dev/null differ
diff --git a/bin/BulletDotNET.pdb b/bin/BulletDotNET.pdb
deleted file mode 100644
index a5499ec75b..0000000000
Binary files a/bin/BulletDotNET.pdb and /dev/null differ
diff --git a/bin/Fadd.Globalization.Yaml.dll b/bin/Fadd.Globalization.Yaml.dll
deleted file mode 100755
index 66a070657e..0000000000
Binary files a/bin/Fadd.Globalization.Yaml.dll and /dev/null differ
diff --git a/bin/Fadd.dll b/bin/Fadd.dll
deleted file mode 100755
index 06183f12f9..0000000000
Binary files a/bin/Fadd.dll and /dev/null differ
diff --git a/bin/Modified.XnaDevRu.BulletX.dll b/bin/Modified.XnaDevRu.BulletX.dll
deleted file mode 100755
index a047f997a9..0000000000
Binary files a/bin/Modified.XnaDevRu.BulletX.dll and /dev/null differ
diff --git a/bin/Mono.Data.Sqlite.dll.config b/bin/Mono.Data.Sqlite.dll.config
index ccc0cf59d8..e66d1b7406 100644
--- a/bin/Mono.Data.Sqlite.dll.config
+++ b/bin/Mono.Data.Sqlite.dll.config
@@ -1,5 +1,5 @@
-
-
-
+
+
+
diff --git a/bin/Ode.NET.dll.config b/bin/Ode.NET.dll.config
index f8f071e8c6..c72c28119e 100644
--- a/bin/Ode.NET.dll.config
+++ b/bin/Ode.NET.dll.config
@@ -1,7 +1,7 @@
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
diff --git a/bin/OpenMetaverse.dll.config b/bin/OpenMetaverse.dll.config
index 13fdc11c72..e8c90a4a1d 100644
--- a/bin/OpenMetaverse.dll.config
+++ b/bin/OpenMetaverse.dll.config
@@ -1,7 +1,7 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/bin/libode.so b/bin/lib32/libode.so
similarity index 100%
rename from bin/libode.so
rename to bin/lib32/libode.so
diff --git a/bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.so b/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.so
similarity index 100%
rename from bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.so
rename to bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.so
diff --git a/bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1.so b/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1.so
similarity index 100%
rename from bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1.so
rename to bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1.so
diff --git a/bin/libsqlite3.txt b/bin/lib32/libsqlite3.txt
similarity index 100%
rename from bin/libsqlite3.txt
rename to bin/lib32/libsqlite3.txt
diff --git a/bin/libsqlite3_32.so b/bin/lib32/libsqlite3_32.so
similarity index 100%
rename from bin/libsqlite3_32.so
rename to bin/lib32/libsqlite3_32.so
diff --git a/bin/libode-x86_64.so b/bin/lib64/libode-x86_64.so
similarity index 100%
rename from bin/libode-x86_64.so
rename to bin/lib64/libode-x86_64.so
diff --git a/bin/libode.dylib b/bin/lib64/libode.dylib
similarity index 100%
rename from bin/libode.dylib
rename to bin/lib64/libode.dylib
diff --git a/bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.so b/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.so
similarity index 100%
rename from bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.so
rename to bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.so
diff --git a/bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib b/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib
similarity index 100%
rename from bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib
rename to bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib
diff --git a/bin/libsqlite3.dylib b/bin/lib64/libsqlite3.dylib
similarity index 100%
rename from bin/libsqlite3.dylib
rename to bin/lib64/libsqlite3.dylib
diff --git a/bin/libsqlite3_64.so b/bin/lib64/libsqlite3_64.so
similarity index 100%
rename from bin/libsqlite3_64.so
rename to bin/lib64/libsqlite3_64.so
diff --git a/bin/libbulletnet.dll b/bin/libbulletnet.dll
deleted file mode 100755
index 8ec7c55da4..0000000000
Binary files a/bin/libbulletnet.dll and /dev/null differ
diff --git a/bin/libbulletnet.so b/bin/libbulletnet.so
deleted file mode 100644
index 14779eaed0..0000000000
Binary files a/bin/libbulletnet.so and /dev/null differ
diff --git a/bin/xunit.dll b/bin/xunit.dll
deleted file mode 100755
index a512735d5d..0000000000
Binary files a/bin/xunit.dll and /dev/null differ