private void CloseMergeReaders(MergePolicy.OneMerge merge, bool suppressExceptions)
{
lock (this)
{
int numSegments = merge.segments.Count;
if (suppressExceptions)
{
// Suppress any new exceptions so we throw the
// original cause
for (int i = 0; i < numSegments; i++)
{
if (merge.readers[i] != null)
{
try
{
readerPool.Release(merge.readers[i], false);
}
catch (Exception)
{
}
merge.readers[i] = null;
}
if (merge.readersClone[i] != null)
{
try
{
merge.readersClone[i].Close();
}
catch (Exception)
{
}
// This was a private clone and we had the
// only reference
System.Diagnostics.Debug.Assert(merge.readersClone[i].RefCount == 0); //: "refCount should be 0 but is " + merge.readersClone[i].getRefCount();
merge.readersClone[i] = null;
}
}
}
else
{
for (int i = 0; i < numSegments; i++)
{
if (merge.readers[i] != null)
{
readerPool.Release(merge.readers[i], true);
merge.readers[i] = null;
}
if (merge.readersClone[i] != null)
{
merge.readersClone[i].Close();
// This was a private clone and we had the only reference
System.Diagnostics.Debug.Assert(merge.readersClone[i].RefCount == 0);
merge.readersClone[i] = null;
}
}
}
}
}