replace stream.beginread

UbitUmarov [2024-04-27 16:03:52]
replace stream.beginread
Filename
OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
index 5d5682f..c3f8680 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
@@ -208,14 +208,7 @@ namespace OSHttpServer
         /// </remarks>
         public virtual void Start()
         {
-            try
-            {
-                m_stream.BeginRead(m_ReceiveBuffer, 0, m_ReceiveBuffer.Length, OnReceive, null);
-            }
-            catch (Exception err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, err.ToString());
-            }
+            Task.Run(ReceiveLoop).ConfigureAwait(false);
         }

         /// <summary>
@@ -348,63 +341,58 @@ namespace OSHttpServer
             }
         }

-        private void OnReceive(IAsyncResult ar)
+        private async void ReceiveLoop()
         {
             try
             {
-                int bytesRead = 0;
-                if (m_stream is null)
-                    return;
-                try
-                {
-                    bytesRead = m_stream.EndRead(ar);
-                }
-                catch (NullReferenceException)
+                while (true)
                 {
-                    Disconnect(SocketError.ConnectionReset);
-                    return;
-                }
+                    if (m_stream == null || !m_stream.CanRead)
+                        return;

-                if (bytesRead == 0)
-                {
-                    Disconnect(SocketError.Success);
-                    return;
-                }
+                    int bytesRead =
+                        await m_stream.ReadAsync(m_ReceiveBuffer, m_ReceiveBytesLeft, m_ReceiveBuffer.Length - m_ReceiveBytesLeft).ConfigureAwait(false);

-                if (m_isClosing)
-                    return;
+                    if (bytesRead == 0)
+                    {
+                        Disconnect(SocketError.Success);
+                        return;
+                    }

-                m_ReceiveBytesLeft += bytesRead;
+                    if (m_isClosing)
+                        return;

-                int offset = m_parser.Parse(m_ReceiveBuffer, 0, m_ReceiveBytesLeft);
-                if (m_stream is null)
-                    return; // "Connection: Close" in effect.
+                    m_ReceiveBytesLeft += bytesRead;

-                if(offset > 0)
-                {
-                    int nextBytesleft, nextOffset;
-                    while ((nextBytesleft = m_ReceiveBytesLeft - offset) > 0)
+                    int offset = m_parser.Parse(m_ReceiveBuffer, 0, m_ReceiveBytesLeft);
+                    if (m_stream is null)
+                        return; // "Connection: Close" in effect.
+
+                    if(offset > 0)
                     {
-                        nextOffset = m_parser.Parse(m_ReceiveBuffer, offset, nextBytesleft);
+                        int nextBytesleft, nextOffset;
+                        while ((nextBytesleft = m_ReceiveBytesLeft - offset) > 0)
+                        {
+                            nextOffset = m_parser.Parse(m_ReceiveBuffer, offset, nextBytesleft);

-                        if (m_stream is null)
-                            return; // "Connection: Close" in effect.
+                            if (m_stream is null)
+                                return; // "Connection: Close" in effect.

-                        if (nextOffset == 0)
-                            break;
+                            if (nextOffset == 0)
+                                break;

-                        offset = nextOffset;
+                            offset = nextOffset;
+                        }
                     }
-                }

-                // copy unused bytes to the beginning of the array
-                if (offset > 0 && m_ReceiveBytesLeft > offset)
-                    Buffer.BlockCopy(m_ReceiveBuffer, offset, m_ReceiveBuffer, 0, m_ReceiveBytesLeft - offset);
+                    // copy unused bytes to the beginning of the array
+                    if (offset > 0 && m_ReceiveBytesLeft > offset)
+                        Buffer.BlockCopy(m_ReceiveBuffer, offset, m_ReceiveBuffer, 0, m_ReceiveBytesLeft - offset);

-                m_ReceiveBytesLeft -= offset;
-                if (StreamPassedOff)
-                    return; //?
-                m_stream.BeginRead(m_ReceiveBuffer, m_ReceiveBytesLeft, m_ReceiveBuffer.Length - m_ReceiveBytesLeft, OnReceive, null);
+                    m_ReceiveBytesLeft -= offset;
+                    if (StreamPassedOff)
+                        return; //?
+                }
             }
             catch (BadRequestException err)
             {
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs b/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
index 51f438a..58d25d6 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
@@ -245,7 +245,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                 IsRunningInbound = true;

                 // kick start the receiver tasks dance.
-                Task.Run(AsyncBeginReceive);
+                Task.Run(AsyncBeginReceive).ConfigureAwait(false);
             }
         }

@@ -287,7 +287,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                 UDPPacketBuffer buf = GetNewUDPBuffer(null); // we need a fresh one here, for now at least
                 try
                 {
-                    int nbytes = await m_udpSocket.ReceiveFromAsync(buf.Data.AsMemory(), SocketFlags.None, workSktAddress, InboundCancellationSource.Token);
+                    int nbytes =
+                        await m_udpSocket.ReceiveFromAsync(buf.Data.AsMemory(), SocketFlags.None, workSktAddress, InboundCancellationSource.Token).ConfigureAwait(false);
                     if (!IsRunningInbound)
                     {
                         FreeUDPBuffer(buf);
ViewGit