Skip to content

Commit cd9a196

Browse files
committed
swift: Avoid a memcpy delivering message envelopes
And consistently use our Data.init(consuming:) for this pattern.
1 parent 4c30886 commit cd9a196

File tree

3 files changed

+3
-16
lines changed

3 files changed

+3
-16
lines changed

swift/Sources/LibSignalClient/ChatListener.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,14 @@ internal class ChatListenerBridge {
9797
/// or the ChatListenerBridge object used to construct it (`self`) will be leaked.
9898
func makeListenerStruct() -> SignalFfiChatListenerStruct {
9999
let receivedIncomingMessage: SignalReceivedIncomingMessage = { rawCtx, envelope, timestamp, ackHandle in
100-
defer { signal_free_buffer(envelope.base, envelope.length) }
101100
let bridge = Unmanaged<ChatListenerBridge>.fromOpaque(rawCtx!).takeUnretainedValue()
102101

102+
let envelopeData = Data(consuming: envelope)
103103
let ackHandleOwner = AckHandleOwner(owned: NonNull(ackHandle)!)
104104
guard let chatConnection = bridge.chatConnection else {
105105
return
106106
}
107107

108-
let envelopeData = Data(bytes: envelope.base, count: envelope.length)
109108
bridge.chatListener.chatConnection(
110109
chatConnection,
111110
didReceiveIncomingMessage: envelopeData,

swift/Sources/LibSignalClient/ChatServiceTypes.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,13 +191,7 @@ public struct ChatResponse: Equatable, Sendable {
191191
)
192192

193193
// Avoid copying the body when possible!
194-
self.body = Data(
195-
bytesNoCopy: rawResponse.body.base,
196-
count: rawResponse.body.length,
197-
deallocator: .custom { base, length in
198-
signal_free_buffer(base, length)
199-
}
200-
)
194+
self.body = Data(consuming: rawResponse.body)
201195
// Clear it out so it doesn't get freed eagerly.
202196
rawResponse.body = .init()
203197

swift/Sources/LibSignalClient/Utils.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,7 @@ internal func invokeFnReturningOptionalArray(
7979
return if output.base == nil {
8080
nil
8181
} else {
82-
Data(
83-
bytesNoCopy: output.base,
84-
count: output.length,
85-
deallocator: .custom { base, length in
86-
signal_free_buffer(base, length)
87-
}
88-
)
82+
Data(consuming: output)
8983
}
9084
}
9185

0 commit comments

Comments
 (0)