ThreadSafeDeltaCache.java
- /*
- * 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();
- }
- }
- }