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 { } } }