Example #1
0
 partial void OnCloseReaderWriter()
 {
     if (ownsSocketManager && socketManager != null)
     {
         socketManager.Dispose();
     }
     socketManager = null;
 }
        private static SocketManager GetSharedSocketManager()
        {
            var manager = Interlocked.CompareExchange(ref sharedSocketManager, null, null);
            if (manager != null) return manager;

            SocketManager killMe = null;
            try
            {
                killMe = new SocketManager();
                manager = Interlocked.CompareExchange(ref sharedSocketManager, killMe, null);
                if(manager == null)
                { // we won the race
                    manager = killMe;
                    killMe = null; // don't dispose
                    return manager;
                }
                else
                { // we lost the race; the newly created one will be disposed
                    return manager;
                }
            }
            finally
            {
                try { if (killMe != null) killMe.Dispose(); } catch { }
            }
        }