- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
111 lines
3.9 KiB
Java
111 lines
3.9 KiB
Java
package androidx.sqlite.util;
|
|
|
|
import android.util.Log;
|
|
import androidx.annotation.RestrictTo;
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.nio.channels.FileChannel;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
import kotlin.jvm.internal.DefaultConstructorMarker;
|
|
import kotlin.jvm.internal.Intrinsics;
|
|
import kotlin.jvm.internal.SourceDebugExtension;
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
|
|
@SourceDebugExtension({"SMAP\nProcessLock.kt\nKotlin\n*S Kotlin\n*F\n+ 1 ProcessLock.kt\nandroidx/sqlite/util/ProcessLock\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n*L\n1#1,103:1\n1#2:104\n*E\n"})
|
|
/* loaded from: classes.dex */
|
|
public final class ProcessLock {
|
|
private static final String TAG = "SupportSQLiteLock";
|
|
private FileChannel lockChannel;
|
|
private final File lockFile;
|
|
private final boolean processLock;
|
|
private final Lock threadLock;
|
|
public static final Companion Companion = new Companion(null);
|
|
private static final Map<String, Lock> threadLocksMap = new HashMap();
|
|
|
|
public ProcessLock(String name, File file, boolean z) {
|
|
File file2;
|
|
Intrinsics.checkNotNullParameter(name, "name");
|
|
this.processLock = z;
|
|
if (file != null) {
|
|
file2 = new File(file, name + ".lck");
|
|
} else {
|
|
file2 = null;
|
|
}
|
|
this.lockFile = file2;
|
|
this.threadLock = Companion.getThreadLock(name);
|
|
}
|
|
|
|
public static /* synthetic */ void lock$default(ProcessLock processLock, boolean z, int i, Object obj) {
|
|
if ((i & 1) != 0) {
|
|
z = processLock.processLock;
|
|
}
|
|
processLock.lock(z);
|
|
}
|
|
|
|
public final void lock(boolean z) {
|
|
this.threadLock.lock();
|
|
if (z) {
|
|
try {
|
|
File file = this.lockFile;
|
|
if (file == null) {
|
|
throw new IOException("No lock directory was provided.");
|
|
}
|
|
File parentFile = file.getParentFile();
|
|
if (parentFile != null) {
|
|
parentFile.mkdirs();
|
|
}
|
|
FileChannel channel = new FileOutputStream(this.lockFile).getChannel();
|
|
channel.lock();
|
|
this.lockChannel = channel;
|
|
} catch (IOException e) {
|
|
this.lockChannel = null;
|
|
Log.w(TAG, "Unable to grab file lock.", e);
|
|
}
|
|
}
|
|
}
|
|
|
|
public final void unlock() {
|
|
try {
|
|
FileChannel fileChannel = this.lockChannel;
|
|
if (fileChannel != null) {
|
|
fileChannel.close();
|
|
}
|
|
} catch (IOException unused) {
|
|
}
|
|
this.threadLock.unlock();
|
|
}
|
|
|
|
@SourceDebugExtension({"SMAP\nProcessLock.kt\nKotlin\n*S Kotlin\n*F\n+ 1 ProcessLock.kt\nandroidx/sqlite/util/ProcessLock$Companion\n+ 2 Maps.kt\nkotlin/collections/MapsKt__MapsKt\n*L\n1#1,103:1\n361#2,7:104\n*S KotlinDebug\n*F\n+ 1 ProcessLock.kt\nandroidx/sqlite/util/ProcessLock$Companion\n*L\n99#1:104,7\n*E\n"})
|
|
public static final class Companion {
|
|
public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) {
|
|
this();
|
|
}
|
|
|
|
private Companion() {
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public final Lock getThreadLock(String str) {
|
|
Lock lock;
|
|
synchronized (ProcessLock.threadLocksMap) {
|
|
try {
|
|
Map map = ProcessLock.threadLocksMap;
|
|
Object obj = map.get(str);
|
|
if (obj == null) {
|
|
obj = new ReentrantLock();
|
|
map.put(str, obj);
|
|
}
|
|
lock = (Lock) obj;
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
return lock;
|
|
}
|
|
}
|
|
}
|