Skip to content

Commit be7ee7a

Browse files
committed
add hook for freeing trait instances
1 parent b058a25 commit be7ee7a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+253
-224
lines changed

bindings/LDK/Bindings.swift

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ open class NativeTypeWrapper: Hashable {
6565

6666
}
6767

68+
open class NativeTraitWrapper: NativeTypeWrapper {
69+
70+
public func activate() -> Self {
71+
Bindings.cacheInstance(instance: self)
72+
return self
73+
}
74+
75+
}
76+
6877
public class Bindings {
6978

7079
internal static var minimumPrintSeverity: PrintSeverity = .WARNING
@@ -6233,7 +6242,7 @@ withUnsafePointer(to: network.cOpaqueStruct!) { (networkPointer: UnsafePointer<L
62336242
withUnsafePointer(to: scorer.cOpaqueStruct!) { (scorerPointer: UnsafePointer<LDKScore>) in
62346243
withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (random_seed_bytesPointer: UnsafePointer<(UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8,UInt8)>) in
62356244

6236-
Result_RouteLightningErrorZ(pointer: find_route(Bindings.new_LDKPublicKey(array: our_node_pubkey), route_paramsPointer, networkPointer, first_hopsPointer, logger.cOpaqueStruct!, scorerPointer, random_seed_bytesPointer))
6245+
Result_RouteLightningErrorZ(pointer: find_route(Bindings.new_LDKPublicKey(array: our_node_pubkey), route_paramsPointer, networkPointer, first_hopsPointer, logger.activate().cOpaqueStruct!, scorerPointer, random_seed_bytesPointer))
62376246

62386247
}
62396248
}
@@ -6255,7 +6264,7 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
62556264
}
62566265

62576266
return
6258-
Result_InvoiceSignOrCreationErrorZ(pointer: create_phantom_invoice(amt_msat.danglingClone().cOpaqueStruct!, Bindings.new_LDKStr(string: description, chars_is_owned: true), Bindings.new_LDKThirtyTwoBytes(array: payment_hash), Bindings.new_LDKThirtyTwoBytes(array: payment_secret), phantom_route_hintsWrapper.dangle().cOpaqueStruct!, keys_manager.cOpaqueStruct!, network))
6267+
Result_InvoiceSignOrCreationErrorZ(pointer: create_phantom_invoice(amt_msat.danglingClone().cOpaqueStruct!, Bindings.new_LDKStr(string: description, chars_is_owned: true), Bindings.new_LDKThirtyTwoBytes(array: payment_hash), Bindings.new_LDKThirtyTwoBytes(array: payment_secret), phantom_route_hintsWrapper.dangle().cOpaqueStruct!, keys_manager.activate().cOpaqueStruct!, network))
62596268

62606269

62616270
}
@@ -6273,7 +6282,7 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
62736282
}
62746283

62756284
return
6276-
Result_InvoiceSignOrCreationErrorZ(pointer: create_phantom_invoice_with_description_hash(amt_msat.danglingClone().cOpaqueStruct!, description_hash.danglingClone().cOpaqueStruct!, Bindings.new_LDKThirtyTwoBytes(array: payment_hash), Bindings.new_LDKThirtyTwoBytes(array: payment_secret), phantom_route_hintsWrapper.dangle().cOpaqueStruct!, keys_manager.cOpaqueStruct!, network))
6285+
Result_InvoiceSignOrCreationErrorZ(pointer: create_phantom_invoice_with_description_hash(amt_msat.danglingClone().cOpaqueStruct!, description_hash.danglingClone().cOpaqueStruct!, Bindings.new_LDKThirtyTwoBytes(array: payment_hash), Bindings.new_LDKThirtyTwoBytes(array: payment_secret), phantom_route_hintsWrapper.dangle().cOpaqueStruct!, keys_manager.activate().cOpaqueStruct!, network))
62776286

62786287

62796288
}
@@ -6282,7 +6291,7 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
62826291

62836292
return withUnsafePointer(to: channelmanager.cOpaqueStruct!) { (channelmanagerPointer: UnsafePointer<LDKChannelManager>) in
62846293

6285-
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager(channelmanagerPointer, keys_manager.cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, Bindings.new_LDKStr(string: description, chars_is_owned: true)))
6294+
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager(channelmanagerPointer, keys_manager.activate().cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, Bindings.new_LDKStr(string: description, chars_is_owned: true)))
62866295

62876296
}
62886297

@@ -6292,7 +6301,7 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
62926301

62936302
return withUnsafePointer(to: channelmanager.cOpaqueStruct!) { (channelmanagerPointer: UnsafePointer<LDKChannelManager>) in
62946303

6295-
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager_with_description_hash(channelmanagerPointer, keys_manager.cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, description_hash.danglingClone().cOpaqueStruct!))
6304+
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager_with_description_hash(channelmanagerPointer, keys_manager.activate().cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, description_hash.danglingClone().cOpaqueStruct!))
62966305

62976306
}
62986307

@@ -6302,7 +6311,7 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
63026311

63036312
return withUnsafePointer(to: channelmanager.cOpaqueStruct!) { (channelmanagerPointer: UnsafePointer<LDKChannelManager>) in
63046313

6305-
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(channelmanagerPointer, keys_manager.cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, description_hash.danglingClone().cOpaqueStruct!, duration_since_epoch))
6314+
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(channelmanagerPointer, keys_manager.activate().cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, description_hash.danglingClone().cOpaqueStruct!, duration_since_epoch))
63066315

63076316
}
63086317

@@ -6312,39 +6321,35 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
63126321

63136322
return withUnsafePointer(to: channelmanager.cOpaqueStruct!) { (channelmanagerPointer: UnsafePointer<LDKChannelManager>) in
63146323

6315-
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager_and_duration_since_epoch(channelmanagerPointer, keys_manager.cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, Bindings.new_LDKStr(string: description, chars_is_owned: true), duration_since_epoch))
6324+
Result_InvoiceSignOrCreationErrorZ(pointer: create_invoice_from_channelmanager_and_duration_since_epoch(channelmanagerPointer, keys_manager.activate().cOpaqueStruct!, network, amt_msat.danglingClone().cOpaqueStruct!, Bindings.new_LDKStr(string: description, chars_is_owned: true), duration_since_epoch))
63166325

63176326
}
63186327

63196328
}
63206329

63216330
/* STATIC_METHODS_END */
63226331

6323-
static var nativelyExposedInstances = [String: NativeTypeWrapper]()
6332+
static var nativelyExposedInstances = [UInt: NativeTraitWrapper]()
63246333

6325-
public class func instanceToPointer(instance: NativeTypeWrapper) -> UnsafeMutableRawPointer {
6326-
let pointer = Unmanaged.passUnretained(instance).toOpaque()
6327-
instance.pointerDebugDescription = pointer.debugDescription
6328-
Self.nativelyExposedInstances[pointer.debugDescription] = instance
6334+
public class func cacheInstance(instance: NativeTraitWrapper) {
6335+
Self.nativelyExposedInstances[instance.globalInstanceNumber] = instance
6336+
}
6337+
6338+
public class func instanceToPointer(instance: NativeTraitWrapper) -> UnsafeMutableRawPointer {
6339+
let pointer = UnsafeMutableRawPointer(bitPattern: instance.globalInstanceNumber)!
6340+
// don't automatically cache the trait instance
6341+
// Self.nativelyExposedInstances[instance.globalInstanceNumber] = instance
63296342
return pointer
63306343
}
63316344

6332-
public class func pointerToInstance<T: NativeTypeWrapper>(pointer: UnsafeRawPointer, sourceMarker: String?) -> T{
6333-
6334-
let callStack = Thread.callStackSymbols
6335-
let caller = sourceMarker ?? callStack[1]
6336-
// print("Retrieving instance from pointer for caller: \(caller)")
6337-
// let value = Unmanaged<T>.fromOpaque(pointer).takeUnretainedValue()
6338-
let value = Self.nativelyExposedInstances[pointer.debugDescription] as! T
6339-
// print("Instance retrieved for caller: \(caller)")
6345+
public class func pointerToInstance<T: NativeTraitWrapper>(pointer: UnsafeRawPointer, sourceMarker: String?) -> T{
6346+
let key = UInt(bitPattern: pointer)
6347+
let value = Self.nativelyExposedInstances[key] as! T
63406348
return value
63416349
}
63426350

63436351
public class func removeInstancePointer(instance: NativeTypeWrapper) -> Bool {
6344-
guard let debugDescription = instance.pointerDebugDescription else {
6345-
return false
6346-
}
6347-
Self.nativelyExposedInstances.removeValue(forKey: debugDescription)
6352+
Self.nativelyExposedInstances.removeValue(forKey: instance.globalInstanceNumber)
63486353
instance.pointerDebugDescription = nil
63496354
return true
63506355
}
@@ -6491,14 +6496,14 @@ withUnsafePointer(to: Bindings.array_to_tuple32(array: random_seed_bytes)) { (ra
64916496
}
64926497
}
64936498
*/
6494-
6499+
64956500
public class func get_ldk_swift_bindings_version() -> String {
6496-
return "e8cb2170ad6613f76c8a5a95941b8b8e2f90b5e1"
6501+
return "b058a25ba435d31e8885e804c0a65425e456ea10"
64976502
}
64986503

64996504
}
65006505

6501-
public class InstanceCrashSimulator: NativeTypeWrapper {
6506+
public class InstanceCrashSimulator: NativeTraitWrapper {
65026507

65036508
public init() {
65046509
super.init(conflictAvoidingVariableName: 0)

bindings/LDK/options/MonitorEvent.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class MonitorEvent: NativeTypeWrapper {
6363
self.cOpaqueStruct!.commitment_tx_confirmed;
6464
if cStruct.inner == nil {
6565
return nil
66-
}
66+
}
6767
return OutPoint(pointer: cStruct, anchor: self)
6868
}()
6969

@@ -86,7 +86,7 @@ public class MonitorEvent: NativeTypeWrapper {
8686
self.cOpaqueStruct!.update_failed;
8787
if cStruct.inner == nil {
8888
return nil
89-
}
89+
}
9090
return OutPoint(pointer: cStruct, anchor: self)
9191
}()
9292

@@ -192,7 +192,7 @@ MonitorEvent_write(objPointer)
192192
self.cOpaqueStruct!.funding_txo;
193193
if cStruct.inner == nil {
194194
return nil
195-
}
195+
}
196196
return OutPoint(pointer: cStruct, anchor: self)
197197
}()
198198

bindings/LDK/options/Option_AccessZ.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class Option_AccessZ: NativeTypeWrapper {
5959

6060
public class func some(o: Access) -> Option_AccessZ {
6161

62-
return Option_AccessZ(pointer: COption_AccessZ_some(o.cOpaqueStruct!));
62+
return Option_AccessZ(pointer: COption_AccessZ_some(o.activate().cOpaqueStruct!));
6363
}
6464

6565
public class func none() -> Option_AccessZ {

bindings/LDK/options/Option_FilterZ.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class Option_FilterZ: NativeTypeWrapper {
5959

6060
public class func some(o: Filter) -> Option_FilterZ {
6161

62-
return Option_FilterZ(pointer: COption_FilterZ_some(o.cOpaqueStruct!));
62+
return Option_FilterZ(pointer: COption_FilterZ_some(o.activate().cOpaqueStruct!));
6363
}
6464

6565
public class func none() -> Option_FilterZ {

bindings/LDK/options/SpendableOutputDescriptor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ SpendableOutputDescriptor_write(objPointer)
160160
self.cOpaqueStruct!.outpoint;
161161
if cStruct.inner == nil {
162162
return nil
163-
}
163+
}
164164
return OutPoint(pointer: cStruct, anchor: self)
165165
}()
166166

bindings/LDK/results/Result_OutPointDecodeErrorZ.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public class Result_OutPointDecodeErrorZ: NativeTypeWrapper {
5353
self.cOpaqueStruct!.contents.result.pointee;
5454
if cStruct.inner == nil {
5555
return nil
56-
}
56+
}
5757
return OutPoint(pointer: cStruct, anchor: self)
5858
}()
5959

bindings/LDK/structs/BackgroundProcessor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ let graphMessageHandler = net_graph_msg_handler?.cOpaqueStruct! ?? LDKNetGraphMs
1818
self.cOpaqueStruct = withUnsafePointer(to: chain_monitor.cOpaqueStruct!) { (chain_monitorPointer: UnsafePointer<LDKChainMonitor>) in
1919
withUnsafePointer(to: channel_manager.cOpaqueStruct!) { (channel_managerPointer: UnsafePointer<LDKChannelManager>) in
2020
withUnsafePointer(to: peer_manager.cOpaqueStruct!) { (peer_managerPointer: UnsafePointer<LDKPeerManager>) in
21-
BackgroundProcessor_start(persister.cOpaqueStruct!, event_handler.cOpaqueStruct!, chain_monitorPointer, channel_managerPointer, graphMessageHandler, peer_managerPointer, logger.cOpaqueStruct!)
21+
BackgroundProcessor_start(persister.activate().cOpaqueStruct!, event_handler.activate().cOpaqueStruct!, chain_monitorPointer, channel_managerPointer, graphMessageHandler, peer_managerPointer, logger.activate().cOpaqueStruct!)
2222
}
2323
}
2424
}

bindings/LDK/structs/ChainMonitor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public init(chain_source: Option_FilterZ, broadcaster: BroadcasterInterface, log
1313
Self.instanceCounter += 1
1414
self.instanceNumber = Self.instanceCounter
1515

16-
self.cOpaqueStruct = ChainMonitor_new(chain_source.cOpaqueStruct!, broadcaster.cOpaqueStruct!, logger.cOpaqueStruct!, feeest.cOpaqueStruct!, persister.cOpaqueStruct!)
16+
self.cOpaqueStruct = ChainMonitor_new(chain_source.cOpaqueStruct!, broadcaster.activate().cOpaqueStruct!, logger.activate().cOpaqueStruct!, feeest.activate().cOpaqueStruct!, persister.activate().cOpaqueStruct!)
1717
super.init(conflictAvoidingVariableName: 0)
1818
try? self.addAnchor(anchor: chain_source)
1919
try? self.addAnchor(anchor: broadcaster)

bindings/LDK/structs/ChannelDetails.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ ChannelDetails_get_funding_txo(this_ptrPointer)
7575
};
7676
if cStruct.inner == nil {
7777
return nil
78-
}
78+
}
7979
return OutPoint(pointer: cStruct)
8080
}()
8181
;

bindings/LDK/structs/ChannelManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class ChannelManager: NativeTypeWrapper {
1111
Self.instanceCounter += 1
1212
self.instanceNumber = Self.instanceCounter
1313

14-
self.cOpaqueStruct = ChannelManager_new(fee_est.cOpaqueStruct!, chain_monitor.cOpaqueStruct!, tx_broadcaster.cOpaqueStruct!, logger.cOpaqueStruct!, keys_manager.cOpaqueStruct!, config.danglingClone().cOpaqueStruct!, params.danglingClone().cOpaqueStruct!)
14+
self.cOpaqueStruct = ChannelManager_new(fee_est.activate().cOpaqueStruct!, chain_monitor.activate().cOpaqueStruct!, tx_broadcaster.activate().cOpaqueStruct!, logger.activate().cOpaqueStruct!, keys_manager.activate().cOpaqueStruct!, config.danglingClone().cOpaqueStruct!, params.danglingClone().cOpaqueStruct!)
1515
super.init(conflictAvoidingVariableName: 0)
1616
try? self.addAnchor(anchor: fee_est)
1717
try? self.addAnchor(anchor: chain_monitor)

0 commit comments

Comments
 (0)