mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 17:55:48 +08:00
Merge branch 'opensim:master' into master
This commit is contained in:
@@ -82,8 +82,8 @@ namespace OpenSim.Framework.Servers
|
||||
m_osSecret = UUID.Random().ToString();
|
||||
}
|
||||
|
||||
private static bool m_NoVerifyCertChain = false;
|
||||
private static bool m_NoVerifyCertHostname = false;
|
||||
private static bool m_NoVerifyCertChain = true;
|
||||
private static bool m_NoVerifyCertHostname = true;
|
||||
|
||||
public static bool ValidateServerCertificate(
|
||||
object sender,
|
||||
|
||||
@@ -71,8 +71,9 @@ namespace OSHttpServer
|
||||
/// <returns><see cref="HttpInputItem.Empty"/> if no item was found.</returns>
|
||||
public HttpInputItem this[string name]
|
||||
{
|
||||
get {
|
||||
return _items.ContainsKey(name) ? _items[name] : Empty;
|
||||
get
|
||||
{
|
||||
return _items.TryGetValue(name, out HttpInputItem hii) ? hii : Empty;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,7 +145,7 @@ namespace OSHttpServer
|
||||
/// <returns>true if the sub-item exists and has a value; otherwise false.</returns>
|
||||
public bool Contains(string name)
|
||||
{
|
||||
return _items.ContainsKey(name) && _items[name].Value != null;
|
||||
return _items.TryGetValue(name, out HttpInputItem hii) && hii.Value != null;
|
||||
}
|
||||
|
||||
/// <summary> Returns a formatted representation of the instance with the values of all contained parameters </summary>
|
||||
@@ -216,7 +217,7 @@ namespace OSHttpServer
|
||||
{
|
||||
get
|
||||
{
|
||||
return _items.ContainsKey(name) ? _items[name] : Empty;
|
||||
return _items.TryGetValue(name, out HttpInputItem hii) ? hii : Empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -240,9 +240,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
if(state != null)
|
||||
{
|
||||
OSDMap s = (OSDMap)state;
|
||||
|
||||
if (s.ContainsKey("ViewerUiIsGod"))
|
||||
newstate = s["ViewerUiIsGod"].AsBoolean();
|
||||
if (s.TryGetValue("ViewerUiIsGod", out OSD tmp))
|
||||
newstate = tmp.AsBoolean();
|
||||
m_lastLevelToViewer = m_viewergodlevel; // we are not changing viewer level by default
|
||||
}
|
||||
UpdateGodLevels(newstate);
|
||||
|
||||
@@ -833,9 +833,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return Math.Tan(f);
|
||||
}
|
||||
|
||||
public LSL_Float llAtan2(LSL_Float x, LSL_Float y)
|
||||
public LSL_Float llAtan2(LSL_Float y, LSL_Float x)
|
||||
{
|
||||
return Math.Atan2(x, y);
|
||||
return Math.Atan2(y, x);
|
||||
}
|
||||
|
||||
public LSL_Float llSqrt(double f)
|
||||
|
||||
@@ -43,7 +43,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||
{
|
||||
void state(string newState);
|
||||
|
||||
//ApiDesc Returns absolute version as val (ie as postive value)
|
||||
LSL_Integer llAbs(LSL_Integer val);
|
||||
//ApiDesc Returns cosine of val (val in radians)
|
||||
LSL_Float llAcos(LSL_Float val);
|
||||
//ApiDesc Sleep 0.1
|
||||
void llAddToLandBanList(LSL_Key avatarId, LSL_Float hours);
|
||||
@@ -55,8 +57,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||
LSL_Float llAngleBetween(LSL_Rotation a, LSL_Rotation b);
|
||||
void llApplyImpulse(LSL_Vector force, LSL_Integer local);
|
||||
void llApplyRotationalImpulse(LSL_Vector force, int local);
|
||||
//ApiDesc Returns sine of val (val in radians)
|
||||
LSL_Float llAsin(LSL_Float val);
|
||||
LSL_Float llAtan2(LSL_Float x, LSL_Float y);
|
||||
//ApiDesc Returns the angle whose tangent is the y/x
|
||||
LSL_Float llAtan2(LSL_Float y, LSL_Float x);
|
||||
void llAttachToAvatar(LSL_Integer attachment);
|
||||
void llAttachToAvatarTemp(LSL_Integer attachmentPoint);
|
||||
LSL_Key llAvatarOnSitTarget();
|
||||
|
||||
@@ -123,9 +123,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public LSL_Float llAtan2(LSL_Float x, LSL_Float y)
|
||||
public LSL_Float llAtan2(LSL_Float y, LSL_Float x)
|
||||
{
|
||||
return m_LSL_Functions.llAtan2(x, y);
|
||||
return m_LSL_Functions.llAtan2(y, x);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
|
||||
@@ -101,9 +101,7 @@ namespace OpenSim.Server
|
||||
ServicePointManager.Expect100Continue = false;
|
||||
ServicePointManager.UseNagleAlgorithm = false;
|
||||
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
|
||||
|
||||
WebUtil.SetupHTTPClients(m_NoVerifyCertChain, m_NoVerifyCertHostname, null, 32);
|
||||
|
||||
|
||||
m_Server = new HttpServerBase("R.O.B.U.S.T.", args);
|
||||
|
||||
string registryLocation;
|
||||
@@ -121,6 +119,7 @@ namespace OpenSim.Server
|
||||
m_NoVerifyCertChain = serverConfig.GetBoolean("NoVerifyCertChain", m_NoVerifyCertChain);
|
||||
m_NoVerifyCertHostname = serverConfig.GetBoolean("NoVerifyCertHostname", m_NoVerifyCertHostname);
|
||||
|
||||
WebUtil.SetupHTTPClients(m_NoVerifyCertChain, m_NoVerifyCertHostname, null, 32);
|
||||
|
||||
string connList = serverConfig.GetString("ServiceConnectors", string.Empty);
|
||||
|
||||
|
||||
11
README.md
11
README.md
@@ -28,8 +28,17 @@ To run OpenSim from a command prompt
|
||||
|
||||
# Running OpenSim on Linux/Mac
|
||||
|
||||
You will need dotnet 6.0 runtime for linux or Mac (https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
|
||||
You will need
|
||||
|
||||
* [dotnet 6.0 Runtime](https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
|
||||
* libgdiplus
|
||||
|
||||
if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it
|
||||
using a package manager for your operating system, like apt, brew, macports, etc
|
||||
for example on debian:
|
||||
|
||||
`apt-get update && apt-get install -y apt-utils libgdiplus libc6-dev`
|
||||
|
||||
To run OpenSim, from the unpacked distribution type:
|
||||
|
||||
* cd bin
|
||||
|
||||
84
ThirdParty/SmartThreadPool/SmartThreadPool.cs
vendored
84
ThirdParty/SmartThreadPool/SmartThreadPool.cs
vendored
@@ -799,21 +799,21 @@ namespace Amib.Threading
|
||||
/// </summary>
|
||||
public void Shutdown()
|
||||
{
|
||||
Shutdown(true, 0);
|
||||
Shutdown(0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Force the SmartThreadPool to shutdown with timeout
|
||||
/// </summary>
|
||||
public void Shutdown(bool forceAbort, TimeSpan timeout)
|
||||
public void Shutdown(TimeSpan timeout)
|
||||
{
|
||||
Shutdown(forceAbort, (int)timeout.TotalMilliseconds);
|
||||
Shutdown((int)timeout.TotalMilliseconds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Empties the queue of work items and abort the threads in the pool.
|
||||
/// </summary>
|
||||
public void Shutdown(bool forceAbort, int millisecondsTimeout)
|
||||
public void Shutdown(int millisecondsTimeout)
|
||||
{
|
||||
ValidateNotDisposed();
|
||||
|
||||
@@ -835,69 +835,41 @@ namespace Amib.Threading
|
||||
|
||||
int millisecondsLeft = millisecondsTimeout;
|
||||
Stopwatch stopwatch = Stopwatch.StartNew();
|
||||
//DateTime start = DateTime.UtcNow;
|
||||
bool waitInfinitely = (Timeout.Infinite == millisecondsTimeout);
|
||||
bool timeout = false;
|
||||
|
||||
// Each iteration we update the time left for the timeout.
|
||||
foreach (ThreadEntry te in threadEntries)
|
||||
if (millisecondsLeft >= Timeout.Infinite)
|
||||
{
|
||||
if (te is null)
|
||||
continue;
|
||||
|
||||
Thread thread = te.WorkThread;
|
||||
|
||||
// Join don't work with negative numbers
|
||||
if (!waitInfinitely && (millisecondsLeft < 0))
|
||||
{
|
||||
timeout = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// Wait for the thread to terminate
|
||||
bool success = thread.Join(millisecondsLeft);
|
||||
if (!success)
|
||||
{
|
||||
timeout = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!waitInfinitely)
|
||||
{
|
||||
// Update the time left to wait
|
||||
//TimeSpan ts = DateTime.UtcNow - start;
|
||||
millisecondsLeft = millisecondsTimeout - (int)stopwatch.ElapsedMilliseconds;
|
||||
}
|
||||
te.WorkThread = null;
|
||||
}
|
||||
|
||||
if (timeout && forceAbort)
|
||||
{
|
||||
// Abort the threads in the pool
|
||||
foreach (ThreadEntry te in threadEntries)
|
||||
{
|
||||
if (te is null)
|
||||
continue;
|
||||
|
||||
Thread thread = te.WorkThread;
|
||||
if (thread is not null && thread.IsAlive )
|
||||
if(thread is null)
|
||||
continue;
|
||||
|
||||
if (thread.IsAlive)
|
||||
{
|
||||
try
|
||||
// Wait for the thread to terminate
|
||||
_ = thread.Join(millisecondsLeft);
|
||||
|
||||
if (millisecondsLeft > 0)
|
||||
{
|
||||
//thread.Abort(); // Shutdown
|
||||
te.WorkThread = null;
|
||||
}
|
||||
catch (SecurityException e)
|
||||
{
|
||||
e.GetHashCode();
|
||||
}
|
||||
catch (ThreadStateException ex)
|
||||
{
|
||||
ex.GetHashCode();
|
||||
// In case the thread has been terminated
|
||||
// after the check if it is alive.
|
||||
// Update the time left to wait
|
||||
millisecondsLeft = millisecondsTimeout - (int)stopwatch.ElapsedMilliseconds;
|
||||
if (millisecondsLeft < 0)
|
||||
millisecondsLeft= 0;
|
||||
}
|
||||
}
|
||||
te.WorkThread = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// there is no Abort in dotnet > 5, so we can't do anything
|
||||
foreach (ThreadEntry te in threadEntries)
|
||||
{
|
||||
if (te is null)
|
||||
continue;
|
||||
te.WorkThread = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
bin/CSJ2K.dll
BIN
bin/CSJ2K.dll
Binary file not shown.
Reference in New Issue
Block a user