Re-entrant lock