don't leak objects (and eventually lead to dead locks) if something is not found in the storage

and hence arc_move() fails putting the new object in the cache

 arc.c needs a bit of refactoring. The initial fetch of an object should be done after before it to the hashtable
 and not after it has been made available to other threads while we still don't know if the key exists in the storage or not.
 The problem is that this actual arc implementation wasn't intended to be thread safe and needs to be changed a bit
 now that it's clear what are the issues.
 The fetch logic must be taken out of arc_move() and used at very first intialization.
 arc_move() will still call that same logic if the object , previously evicted and/or put in a ghost list, needs to be
 re-fetched because being moved to one of the live lists
just a note to remember something which needs to be changed at some stage