void RemoveSpecial (ArrayList coll, ListenerPrefix prefix)
{
if (coll == null)
return;
try {
plock.AcquireReaderLock (-1);
int c = coll.Count;
for (int i = 0; i < c; i++) {
ListenerPrefix p = (ListenerPrefix) coll [i];
if (p.Path == prefix.Path) {
plock.UpgradeToWriterLock (-1);
coll.RemoveAt (i);
CheckIfRemove ();
return;
}
}
} finally {
try {
plock.ReleaseReaderLock (); // Releases the writer lock if held
} catch {}
}
}