private void checkForFinale() { if ($gate.isPermanentlyEmpty()) { // give our listener a chance to notice our final drain. // set our listener to null at the same time. this prevents possibly awkward loops if one // tries to readAllNow() in a listener before checking isExhausted(). Listener<ReadHead<$T>> $del = $el; $el = null; /* we can't do this set after invoking the listener because it could potentially cause the whole loop we're trying to block here. */ invokeListener($del); } }