Dev: fix race conditions in "double-check lock"
Trying read value from dictionary outside lock is unsafe
This commit is contained in:
parent
20e5079690
commit
3bd5f9bdab
|
@ -136,9 +136,6 @@ public extension JNICore {
|
||||||
|
|
||||||
// MARK: Global cache functions
|
// MARK: Global cache functions
|
||||||
public func getJavaClass(_ className: String) throws -> jclass {
|
public func getJavaClass(_ className: String) throws -> jclass {
|
||||||
if let javaClass = javaClasses[className] {
|
|
||||||
return javaClass
|
|
||||||
}
|
|
||||||
return try javaClassesLock.sync {
|
return try javaClassesLock.sync {
|
||||||
if let javaClass = javaClasses[className] {
|
if let javaClass = javaClasses[className] {
|
||||||
return javaClass
|
return javaClass
|
||||||
|
@ -160,9 +157,6 @@ public extension JNICore {
|
||||||
public func getJavaMethod(forClass className: String, method: String, sig: String) throws -> jmethodID {
|
public func getJavaMethod(forClass className: String, method: String, sig: String) throws -> jmethodID {
|
||||||
let key = "\(className).\(method)\(sig)"
|
let key = "\(className).\(method)\(sig)"
|
||||||
let javaClass = try getJavaClass(className)
|
let javaClass = try getJavaClass(className)
|
||||||
if let methodID = javaMethods[key] {
|
|
||||||
return methodID
|
|
||||||
}
|
|
||||||
return try javaMethodLock.sync {
|
return try javaMethodLock.sync {
|
||||||
if let methodID = javaMethods[key] {
|
if let methodID = javaMethods[key] {
|
||||||
return methodID
|
return methodID
|
||||||
|
@ -180,9 +174,6 @@ public extension JNICore {
|
||||||
public func getStaticJavaMethod(forClass className: String, method: String, sig: String) throws -> jmethodID {
|
public func getStaticJavaMethod(forClass className: String, method: String, sig: String) throws -> jmethodID {
|
||||||
let key = "\(className).\(method)\(sig)"
|
let key = "\(className).\(method)\(sig)"
|
||||||
let javaClass = try getJavaClass(className)
|
let javaClass = try getJavaClass(className)
|
||||||
if let methodID = javaStaticMethods[key] {
|
|
||||||
return methodID
|
|
||||||
}
|
|
||||||
return try javaStaticMethodLock.sync {
|
return try javaStaticMethodLock.sync {
|
||||||
if let methodID = javaStaticMethods[key] {
|
if let methodID = javaStaticMethods[key] {
|
||||||
return methodID
|
return methodID
|
||||||
|
@ -200,9 +191,6 @@ public extension JNICore {
|
||||||
public func getJavaField(forClass className: String, field: String, sig: String) throws -> jfieldID {
|
public func getJavaField(forClass className: String, field: String, sig: String) throws -> jfieldID {
|
||||||
let key = "\(className).\(field)\(sig)"
|
let key = "\(className).\(field)\(sig)"
|
||||||
let javaClass = try getJavaClass(className)
|
let javaClass = try getJavaClass(className)
|
||||||
if let fieldID = javaFields[key] {
|
|
||||||
return fieldID
|
|
||||||
}
|
|
||||||
return try javaFieldLock.sync({
|
return try javaFieldLock.sync({
|
||||||
if let fieldID = javaFields[key] {
|
if let fieldID = javaFields[key] {
|
||||||
return fieldID
|
return fieldID
|
||||||
|
|
Loading…
Reference in New Issue