[Socket] Use type specific read and write queue for SocketAsyncWorker
authorLudovic Henry <ludovic.henry@xamarin.com>
Thu, 9 Apr 2015 14:46:18 +0000 (15:46 +0100)
committerLudovic Henry <ludovic.henry@xamarin.com>
Thu, 9 Apr 2015 14:46:18 +0000 (15:46 +0100)
mcs/class/System/System.Net.Sockets/Socket.cs
mcs/class/System/System.Net.Sockets/SocketAsyncResult.cs

index c0e1e9548250b909e995d8c912a3f5661eb78e7f..9f88be1fe9c5eb59bedd6a60a1c896c932b3cc6a 100644 (file)
@@ -86,8 +86,8 @@ namespace System.Net.Sockets
                 */
                internal EndPoint seed_endpoint = null;
 
-               internal Queue readQ = new Queue (2);
-               internal Queue writeQ = new Queue (2);
+               internal Queue<SocketAsyncWorker> readQ = new Queue<SocketAsyncWorker> (2);
+               internal Queue<SocketAsyncWorker> writeQ = new Queue<SocketAsyncWorker> (2);
 
                internal bool is_blocking = true;
                internal bool is_bound;
@@ -3058,7 +3058,7 @@ namespace System.Net.Sockets
                        return sockares;
                }
 
-               void QueueSocketAsyncResult (Queue queue, SocketAsyncWorker worker, SocketAsyncResult sockares)
+               void QueueSocketAsyncResult (Queue<SocketAsyncWorker> queue, SocketAsyncWorker worker, SocketAsyncResult sockares)
                {
                        int count;
                        lock (queue) {
index e3f82f902c62e230560a8f329e34f0416acbe3d6..5f361f47a80ac6fd9d836d6941ebed1f554925c5 100644 (file)
@@ -225,7 +225,7 @@ namespace System.Net.Sockets
 
                        IsCompleted = true;
 
-                       Queue queue = null;
+                       Queue<SocketAsyncWorker> queue = null;
                        switch (operation) {
                        case SocketOperation.Receive:
                        case SocketOperation.ReceiveFrom:
@@ -249,12 +249,12 @@ namespace System.Net.Sockets
                                                queue.Dequeue (); /* remove ourselves */
                                        if (queue.Count > 0) {
                                                if (!socket.is_disposed) {
-                                                       Socket.socket_pool_queue (SocketAsyncWorker.Dispatcher, ((SocketAsyncWorker) queue.Peek ()).result);
+                                                       Socket.socket_pool_queue (SocketAsyncWorker.Dispatcher, (queue.Peek ()).result);
                                                } else {
                                                        /* CompleteAllOnDispose */
-                                                       object [] pending = queue.ToArray ();
-                                                       for (int i = 0; i < pending.Length; i++)
-                                                               ThreadPool.UnsafeQueueUserWorkItem (((SocketAsyncWorker) pending [i]).result.CompleteDisposed, null);
+                                                       SocketAsyncWorker [] workers = queue.ToArray ();
+                                                       for (int i = 0; i < workers.Length; i++)
+                                                               ThreadPool.UnsafeQueueUserWorkItem (workers [i].result.CompleteDisposed, null);
                                                        queue.Clear ();
                                                }
                                        }