diff --git a/OpenSim/Framework/RestClient.cs b/OpenSim/Framework/RestClient.cs
index f3a4b6d1d9..4c0d9031f1 100644
--- a/OpenSim/Framework/RestClient.cs
+++ b/OpenSim/Framework/RestClient.cs
@@ -32,7 +32,6 @@ using System.Net;
using System.Reflection;
using System.Text;
using System.Threading;
-using System.Threading.Tasks;
using System.Web;
using log4net;
@@ -325,7 +324,6 @@ namespace OpenSim.Framework
{
lock (_lock)
{
- int reqnum = WebUtil.RequestNumber++;
try
{
_request = (HttpWebRequest) WebRequest.Create(buildUri());
@@ -335,9 +333,11 @@ namespace OpenSim.Framework
_asyncException = null;
if (auth != null)
auth.AddAuthorization(_request.Headers);
+ else
+ _request.AllowWriteStreamBuffering = false;
if (WebUtil.DebugLevel >= 3)
- m_log.DebugFormat("[LOGHTTP]: HTTP OUT {0} REST {1} to {2}", reqnum, _request.Method, _request.RequestUri);
+ m_log.DebugFormat("[REST CLIENT] {0} to {1}", _request.Method, _request.RequestUri);
using (_response = (HttpWebResponse) _request.GetResponse())
{
@@ -379,16 +379,15 @@ namespace OpenSim.Framework
}
if (WebUtil.DebugLevel >= 5)
- WebUtil.LogResponseDetail(reqnum, _resource);
+ WebUtil.LogOutgoingDetail("[REST CLIENT]", _resource);
return _resource;
}
}
- // just post data, ignoring result
- public async Task AsyncPOSTRequest(byte[] src, IServiceAuth auth)
+ // just sync post data, ignoring result
+ public void POSTRequest(byte[] src, IServiceAuth auth)
{
- int reqnum = WebUtil.RequestNumber++;
try
{
_request = (HttpWebRequest)WebRequest.Create(buildUri());
@@ -399,10 +398,12 @@ namespace OpenSim.Framework
_request.ContentLength = src.Length;
if (auth != null)
auth.AddAuthorization(_request.Headers);
+ else
+ _request.AllowWriteStreamBuffering = false;
}
catch (Exception e)
{
- m_log.WarnFormat("[REST]: AsyncPOST {0} failed with exception {1} {2}",
+ m_log.WarnFormat("[REST]: POST {0} failed with exception {1} {2}",
_request.RequestUri, e.Message, e.StackTrace);
return;
}
@@ -411,19 +412,20 @@ namespace OpenSim.Framework
{
using (Stream dst = _request.GetRequestStream())
{
- await dst.WriteAsync(src, 0, src.Length).ConfigureAwait(false);
+ dst.Write(src, 0, src.Length);
}
- using(HttpWebResponse response = (HttpWebResponse)await _request.GetResponseAsync().ConfigureAwait(false))
+ using(HttpWebResponse response = (HttpWebResponse)_request.GetResponse())
{
- if (WebUtil.DebugLevel >= 5)
+ using (Stream responseStream = response.GetResponseStream())
{
- using (Stream responseStream = response.GetResponseStream())
+ using (StreamReader reader = new StreamReader(responseStream))
{
- using (StreamReader reader = new StreamReader(responseStream))
+ string responseStr = reader.ReadToEnd();
+ if (WebUtil.DebugLevel >= 5)
{
- string responseStr = await reader.ReadToEndAsync().ConfigureAwait(false);
- WebUtil.LogResponseDetail(reqnum, responseStr);
+ int reqnum = WebUtil.RequestNumber++;
+ WebUtil.LogOutgoingDetail("REST POST", responseStr);
}
}
}
@@ -431,7 +433,7 @@ namespace OpenSim.Framework
}
catch (WebException e)
{
- m_log.WarnFormat("[REST]: AsyncPOST {0} failed with status {1} and message {2}",
+ m_log.WarnFormat("[REST]: POST {0} failed with status {1} and message {2}",
_request.RequestUri, e.Status, e.Message);
return;
}
@@ -443,45 +445,6 @@ namespace OpenSim.Framework
}
}
- #region Async Invocation
-
- public IAsyncResult BeginRequest(AsyncCallback callback, object state)
- {
- ///
- /// In case, we are invoked asynchroneously this object will keep track of the state
- ///
- AsyncResult ar = new AsyncResult(callback, state);
- Util.FireAndForget(RequestHelper, ar, "RestClient.BeginRequest");
- return ar;
- }
-
- public Stream EndRequest(IAsyncResult asyncResult)
- {
- AsyncResult ar = (AsyncResult) asyncResult;
-
- // Wait for operation to complete, then return result or
- // throw exception
- return ar.EndInvoke();
- }
-
- private void RequestHelper(Object asyncResult)
- {
- // We know that it's really an AsyncResult object
- AsyncResult ar = (AsyncResult) asyncResult;
- try
- {
- // Perform the operation; if sucessful set the result
- MemoryStream s = Request(null);
- ar.SetAsCompleted(s, false);
- }
- catch (Exception e)
- {
- // If operation fails, set the exception
- ar.HandleException(e, false);
- }
- }
-
- #endregion Async Invocation
}
internal class SimpleAsyncResult : IAsyncResult
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 607e0277fa..1033484020 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -125,17 +125,15 @@ namespace OpenSim.Framework
///
public class STPInfo
{
- public string Name { get; set; }
- public STPStartInfo STPStartInfo { get; set; }
- public WIGStartInfo WIGStartInfo { get; set; }
- public bool IsIdle { get; set; }
- public bool IsShuttingDown { get; set; }
- public int MaxThreads { get; set; }
- public int MinThreads { get; set; }
- public int InUseThreads { get; set; }
- public int ActiveThreads { get; set; }
- public int WaitingCallbacks { get; set; }
- public int MaxConcurrentWorkItems { get; set; }
+ public string Name;
+ public bool IsIdle;
+ public bool IsShuttingDown;
+ public int MaxThreads;
+ public int MinThreads;
+ public int InUseThreads;
+ public int ActiveThreads;
+ public int WaitingCallbacks;
+ public int MaxConcurrentWorkItems;
}
///
@@ -3324,10 +3322,9 @@ namespace OpenSim.Framework
if (m_ThreadPool == null)
return null;
- STPInfo stpi = new STPInfo()
+ return new STPInfo()
{
Name = m_ThreadPool.Name,
- STPStartInfo = m_ThreadPool.STPStartInfo,
IsIdle = m_ThreadPool.IsIdle,
IsShuttingDown = m_ThreadPool.IsShuttingdown,
MaxThreads = m_ThreadPool.MaxThreads,
@@ -3337,7 +3334,6 @@ namespace OpenSim.Framework
WaitingCallbacks = m_ThreadPool.WaitingCallbacks,
MaxConcurrentWorkItems = m_ThreadPool.Concurrency
};
- return stpi;
}
public static void StopThreadPool()
diff --git a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs
index e49b803ff0..596e7cb767 100644
--- a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs
@@ -35,7 +35,6 @@ using System.Xml.Serialization;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
-using System.Threading.Tasks;
using log4net;
using OpenSim.Framework;
using OpenSim.Framework.ServiceAuth;
@@ -186,7 +185,7 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures
{
}
- public async Task Store(UUID agentId, WearableCacheItem[] data)
+ public void Store(UUID agentId, WearableCacheItem[] data)
{
if (m_URL == String.Empty)
return;
@@ -237,18 +236,18 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures
uploadData = bakeStream.ToArray();
}
- //Util.FireAndForget(
- // delegate
- // {
+ Util.FireAndForget(
+ delegate
+ {
using(RestClient rc = new RestClient(m_URL))
{
rc.AddResourcePath("bakes/" + agentId.ToString());
- await rc.AsyncPOSTRequest(uploadData, m_Auth).ConfigureAwait(false);
+ rc.POSTRequest(uploadData, m_Auth);
m_log.DebugFormat("[XBakes]: stored {0} textures for user {1}", numberWears, agentId);
}
uploadData = null;
- // }, null, "XBakesModule.Store"
- //);
+ }, null, "XBakesModule.Store"
+ );
}
}
}
diff --git a/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs b/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs
index 990ded2bc7..cbf8c5f460 100644
--- a/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs
@@ -38,7 +38,7 @@ namespace OpenSim.Services.Interfaces
WearableCacheItem[] Get(UUID id);
void Store(UUID id);
- Task Store(UUID id, WearableCacheItem[] WearableCache);
+ void Store(UUID id, WearableCacheItem[] WearableCache);
void UpdateMeshAvatar(UUID id);
}
}