ubOde: add threading related calls new ode.dll may need. Hope this doesn't break with current linux ode library
parent
0c93159297
commit
98a00cbce5
|
@ -466,6 +466,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
{
|
||||
lock (_parent_scene.OdeLock)
|
||||
{
|
||||
d.AllocateODEDataForThread(0);
|
||||
|
||||
d.Vector3 dtmp;
|
||||
if (!childPrim && Body != IntPtr.Zero)
|
||||
{
|
||||
|
@ -892,9 +894,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
_velocity.Y = 0;
|
||||
_velocity.Z = 0;
|
||||
|
||||
d.AllocateODEDataForThread(0);
|
||||
|
||||
m_lastVelocity = _velocity;
|
||||
if (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE)
|
||||
m_vehicle.Stop();
|
||||
m_vehicle.Stop();
|
||||
|
||||
if(Body != IntPtr.Zero)
|
||||
d.BodySetLinearVel(Body, 0, 0, 0); // stop it
|
||||
|
|
|
@ -366,7 +366,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
/// </summary>
|
||||
private void Initialization()
|
||||
{
|
||||
// checkThread();
|
||||
d.AllocateODEDataForThread(~0U);
|
||||
|
||||
SimulationLock = new Object();
|
||||
|
||||
nearCallback = near;
|
||||
|
@ -1290,7 +1291,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
public override void RemoveAvatar(PhysicsActor actor)
|
||||
{
|
||||
//m_log.Debug("[PHYSICS]:ODELOCK");
|
||||
((OdeCharacter) actor).Destroy();
|
||||
lock (OdeLock)
|
||||
{
|
||||
d.AllocateODEDataForThread(0);
|
||||
((OdeCharacter) actor).Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1319,6 +1324,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
OdePrim newPrim;
|
||||
lock (OdeLock)
|
||||
{
|
||||
|
||||
newPrim = new OdePrim(name, this, position, size, rotation, pbs, isphysical, isPhantom, shapeType, localID);
|
||||
lock (_prims)
|
||||
_prims.Add(newPrim);
|
||||
|
@ -1547,6 +1553,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
return;
|
||||
}
|
||||
|
||||
d.AllocateODEDataForThread(~0U);
|
||||
|
||||
ODEchangeitem item;
|
||||
|
||||
int donechanges = 0;
|
||||
|
@ -1630,7 +1638,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
int changestimeMS = 0;
|
||||
int maxChangestime = (int)(reqTimeStep * 500f); // half the time
|
||||
int maxLoopTime = (int)(reqTimeStep * 1200f); // 1.2 the time
|
||||
|
||||
|
||||
d.AllocateODEDataForThread(~0U);
|
||||
|
||||
if (ChangesQueue.Count > 0)
|
||||
{
|
||||
while (ChangesQueue.Dequeue(out item))
|
||||
|
@ -2260,6 +2270,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
|
||||
lock (OdeLock)
|
||||
{
|
||||
d.AllocateODEDataForThread(~0U);
|
||||
|
||||
IntPtr GroundGeom = IntPtr.Zero;
|
||||
if (RegionTerrain.TryGetValue(pOffset, out GroundGeom))
|
||||
{
|
||||
|
@ -2450,9 +2462,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
|||
{
|
||||
lock (OdeLock)
|
||||
{
|
||||
|
||||
if (world == IntPtr.Zero)
|
||||
return;
|
||||
|
||||
d.AllocateODEDataForThread(~0U);
|
||||
|
||||
if (m_meshWorker != null)
|
||||
m_meshWorker.Stop();
|
||||
|
||||
|
|
Loading…
Reference in New Issue