private void FreeContextNode(ContextNode contextNode) { _stack.Remove(contextNode); while (contextNode.ContextInfoNodes.Count > 0) { var contextInfoNode = contextNode.ContextInfoNodes.RemoveHead(); PurgeContextInfoNode(contextInfoNode); } contextNode.Dispose(); }
/// <summary> /// Dispose the <see cref="IFFParser"/>. /// </summary> /// <param name="disposing">If set to <c>true</c> disposing.</param> protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { var result = 0L; var top = (ContextNode)null; var ci = (ContextInfoNode)null; while (GetCurrentContext() != null) { result = PopChunkRead(); if (result < 0) { while ((top = GetCurrentContext()) != null) { FreeContextNode(top); } } } /* also do the master context */ while (_topContext.ContextInfoNodes.Count > 0) { ci = _topContext.ContextInfoNodes.RemoveHead(); PurgeContextInfoNode(ci); } if (result >= 0) { result = _streamOperations.Close(_ioContext); } else { _streamOperations.Close(_ioContext); } _topContext.Dispose(); _topContext = null; } _disposed = true; } }