Пример #1
0
 private void FreeContextNode(ContextNode contextNode)
 {
     _stack.Remove(contextNode);
     while (contextNode.ContextInfoNodes.Count > 0)
     {
         var contextInfoNode = contextNode.ContextInfoNodes.RemoveHead();
         PurgeContextInfoNode(contextInfoNode);
     }
     contextNode.Dispose();
 }
Пример #2
0
        /// <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;
            }
        }