the object lock needs to be recursive

and arc_remove() must be called while the lock is being retained so that no fetch operations
can start while discarding the object.

Here the logic should be refactored to avoid the use of a recursive lock and to allow
'reviving' the object if being requested again while not discarded yet (but going to)