Взятием-освобождением блокировки вы нарушаете ее атомарность. Надо взять ее единожды, а отдать в самом конце.