| /* |
| * Copyright (C) 2010, Google Inc. and others |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Distribution License v. 1.0 which is available at |
| * https://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| package org.eclipse.jgit.internal.storage.pack; |
| |
| import java.util.concurrent.locks.ReentrantLock; |
| |
| import org.eclipse.jgit.storage.pack.PackConfig; |
| |
| class ThreadSafeDeltaCache extends DeltaCache { |
| private final ReentrantLock lock; |
| |
| ThreadSafeDeltaCache(PackConfig pc) { |
| super(pc); |
| lock = new ReentrantLock(); |
| } |
| |
| @Override |
| boolean canCache(int length, ObjectToPack src, ObjectToPack res) { |
| lock.lock(); |
| try { |
| return super.canCache(length, src, res); |
| } finally { |
| lock.unlock(); |
| } |
| } |
| |
| @Override |
| void credit(int reservedSize) { |
| lock.lock(); |
| try { |
| super.credit(reservedSize); |
| } finally { |
| lock.unlock(); |
| } |
| } |
| |
| @Override |
| Ref cache(byte[] data, int actLen, int reservedSize) { |
| data = resize(data, actLen); |
| lock.lock(); |
| try { |
| return super.cache(data, actLen, reservedSize); |
| } finally { |
| lock.unlock(); |
| } |
| } |
| } |