Ejemplo n.º 1
0
		private void RebuildIndexes()
		{
			_serverAccessLock.UpgradeToWriterLock(Timeout.Infinite);

			try
			{
				Type ltype = _configuration.NodeLocator;

				IRedisNodeLocator l = ltype == null ? new DefaultNodeLocator() : (IRedisNodeLocator)FastActivator.CreateInstance(ltype);
				l.Initialize(_workingServers);

				_nodeLocator = l;

				_publicWorkingServers = null;
			}
			finally
			{
				_serverAccessLock.ReleaseLock();
			}
		}
Ejemplo n.º 2
0
		void IDisposable.Dispose()
		{
			var rwl = _serverAccessLock;

			if (Interlocked.CompareExchange(ref _serverAccessLock, null, rwl) == null)
				return;

			GC.SuppressFinalize(this);

			try
			{
				rwl.UpgradeToWriterLock(Timeout.Infinite);

				Action<IRedisNode> cleanupNode = node =>
				{
					//node.SocketConnected -= OnSocketConnected;
					node.Dispose();
				};

				// dispose the nodes (they'll kill connections, etc.)
				_deadServers.ForEach(cleanupNode);
				_workingServers.ForEach(cleanupNode);

				_deadServers.Clear();
				_workingServers.Clear();

				_nodeLocator = null;

				_isAliveTimer.Dispose();
				_isAliveTimer = null;
			}
			finally
			{
				rwl.ReleaseLock();
			}
		}