Don't remove ADB entry from LRU before trying to expire it

Ondřej Surý requested to merge 3875-dont-unlink-before-expire_entry into main

There was a code flow error that would remove the expired ADB entry from the LRU list and then a check in the expire_entry() would cause assertion error because it expect the ADB entry to be linked.

Additionally, the expire mechanism would loop for cases when we would held only a read rwlock; in such case we need to upgrade the lock and try again, not just try again.

Closes #3875 (closed)

Merge request reports