Skip to content

Commit 90b8590

Browse files
committed
Add logging for bad lookups and uncaches.
1 parent eb40db3 commit 90b8590

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

bindings/LDK/Bindings.swift

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6330,40 +6330,47 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
63306330
/* STATIC_METHODS_END */
63316331

63326332
static var nativelyExposedInstances = [UInt: NativeTraitWrapper]()
6333-
static var nativelyExposedInstanceReferenceCounter = [UInt: UInt]()
6333+
static var nativelyExposedInstanceReferenceCounter = [UInt: Int]()
63346334

63356335
public class func cacheInstance(instance: NativeTraitWrapper) {
63366336
let key = instance.globalInstanceNumber
6337-
let counter = Self.nativelyExposedInstanceReferenceCounter[key] ?? 0
6338-
Self.nativelyExposedInstanceReferenceCounter[key] = counter + 1
6339-
if counter == 0 {
6340-
print("Caching global instance \(key)")
6337+
let referenceCount = (Self.nativelyExposedInstanceReferenceCounter[key] ?? 0) + 1
6338+
Self.nativelyExposedInstanceReferenceCounter[key] = referenceCount
6339+
if referenceCount == 1 {
6340+
print("Caching global instance \(key). Cached instance count: \(nativelyExposedInstanceReferenceCounter.count)")
63416341
Self.nativelyExposedInstances[key] = instance
63426342
}
63436343
}
63446344

63456345
public class func instanceToPointer(instance: NativeTraitWrapper) -> UnsafeMutableRawPointer {
6346-
let pointer = UnsafeMutableRawPointer(bitPattern: instance.globalInstanceNumber)!
6346+
let key = instance.globalInstanceNumber
6347+
let pointer = UnsafeMutableRawPointer(bitPattern: key)!
63476348
// don't automatically cache the trait instance
63486349
// Self.nativelyExposedInstances[instance.globalInstanceNumber] = instance
63496350
return pointer
63506351
}
63516352

63526353
public class func pointerToInstance<T: NativeTraitWrapper>(pointer: UnsafeRawPointer, sourceMarker: String?) -> T{
63536354
let key = UInt(bitPattern: pointer)
6354-
print("\(sourceMarker) > Releasing global instance \(key)", severity: .DEBUG)
63556355
let value = Self.nativelyExposedInstances[key] as! T
6356+
let referenceCount = Self.nativelyExposedInstanceReferenceCounter[key] ?? 0
6357+
if referenceCount < 1 {
6358+
print("Bad lookup: non-positive reference count for instance \(key): \(referenceCount)!", severity: .ERROR)
6359+
}
63566360
return value
63576361
}
63586362

63596363
public class func removeInstancePointer(instance: NativeTraitWrapper) -> Bool {
63606364
let key = instance.globalInstanceNumber
6361-
Self.nativelyExposedInstanceReferenceCounter[key] = Self.nativelyExposedInstanceReferenceCounter[key]! - 1
6362-
let referenceCount = Self.nativelyExposedInstanceReferenceCounter[key]
6365+
let referenceCount = (Self.nativelyExposedInstanceReferenceCounter[key] ?? 0) - 1
6366+
Self.nativelyExposedInstanceReferenceCounter[key] = referenceCount
63636367
if referenceCount == 0 {
63646368
print("Uncaching global instance \(key)")
6369+
// TODO: fix counting
63656370
Self.nativelyExposedInstances.removeValue(forKey: key)
63666371
instance.pointerDebugDescription = nil
6372+
} else if referenceCount < 0 {
6373+
print("Bad uncache: negative reference count (\(referenceCount)) for instance \(key)!", severity: .ERROR)
63676374
}
63686375
return true
63696376
}
@@ -6512,7 +6519,7 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
65126519
*/
65136520

65146521
public class func get_ldk_swift_bindings_version() -> String {
6515-
return "be7ee7abb0bf358457f0e91a0403146885e9bc24"
6522+
return "eb40db30cfc9a35a8947dbbc17d7fdcc05bc3b50"
65166523
}
65176524

65186525
}

templates/BindingsTemplate.swift

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -239,36 +239,47 @@ public class Bindings {
239239
/* STATIC_METHODS_END */
240240

241241
static var nativelyExposedInstances = [UInt: NativeTraitWrapper]()
242-
static var nativelyExposedInstanceReferenceCounter = [UInt: UInt]()
242+
static var nativelyExposedInstanceReferenceCounter = [UInt: Int]()
243243

244244
public class func cacheInstance(instance: NativeTraitWrapper) {
245245
let key = instance.globalInstanceNumber
246-
let counter = Self.nativelyExposedInstanceReferenceCounter[key] ?? 0
247-
Self.nativelyExposedInstanceReferenceCounter[key] = counter + 1
248-
Self.nativelyExposedInstances[key] = instance
246+
let referenceCount = (Self.nativelyExposedInstanceReferenceCounter[key] ?? 0) + 1
247+
Self.nativelyExposedInstanceReferenceCounter[key] = referenceCount
248+
if referenceCount == 1 {
249+
print("Caching global instance \(key). Cached instance count: \(nativelyExposedInstanceReferenceCounter.count)")
250+
Self.nativelyExposedInstances[key] = instance
251+
}
249252
}
250253

251254
public class func instanceToPointer(instance: NativeTraitWrapper) -> UnsafeMutableRawPointer {
252-
let pointer = UnsafeMutableRawPointer(bitPattern: instance.globalInstanceNumber)!
255+
let key = instance.globalInstanceNumber
256+
let pointer = UnsafeMutableRawPointer(bitPattern: key)!
253257
// don't automatically cache the trait instance
254258
// Self.nativelyExposedInstances[instance.globalInstanceNumber] = instance
255259
return pointer
256260
}
257261

258262
public class func pointerToInstance<T: NativeTraitWrapper>(pointer: UnsafeRawPointer, sourceMarker: String?) -> T{
259263
let key = UInt(bitPattern: pointer)
260-
print("\(sourceMarker) > Releasing global instance \(key)", severity: .DEBUG)
261264
let value = Self.nativelyExposedInstances[key] as! T
265+
let referenceCount = Self.nativelyExposedInstanceReferenceCounter[key] ?? 0
266+
if referenceCount < 1 {
267+
print("Bad lookup: non-positive reference count for instance \(key): \(referenceCount)!", severity: .ERROR)
268+
}
262269
return value
263270
}
264271

265272
public class func removeInstancePointer(instance: NativeTraitWrapper) -> Bool {
266273
let key = instance.globalInstanceNumber
267-
Self.nativelyExposedInstanceReferenceCounter[key] = Self.nativelyExposedInstanceReferenceCounter[key]! - 1
268-
let referenceCount = Self.nativelyExposedInstanceReferenceCounter[key]
274+
let referenceCount = (Self.nativelyExposedInstanceReferenceCounter[key] ?? 0) - 1
275+
Self.nativelyExposedInstanceReferenceCounter[key] = referenceCount
269276
if referenceCount == 0 {
270-
Self.nativelyExposedInstances.removeValue(forKey: key)
277+
print("Uncaching global instance \(key)")
278+
// TODO: fix counting
279+
// Self.nativelyExposedInstances.removeValue(forKey: key)
271280
instance.pointerDebugDescription = nil
281+
} else if referenceCount < 0 {
282+
print("Bad uncache: negative reference count (\(referenceCount)) for instance \(key)!", severity: .ERROR)
272283
}
273284
return true
274285
}

0 commit comments

Comments
 (0)