Skip to content

Commit 58f168e

Browse files
committed
Use NIOLockedValueBox instead of Mutex
1 parent 68bca21 commit 58f168e

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
import Foundation
16-
//import ServiceLifecycle
1716
import Logging
1817
import NIOCore
19-
import Synchronization
18+
import NIOConcurrencyHelpers
2019

21-
package final class NewLambdaRuntime<Handler>: Sendable where Handler: StreamingLambdaHandler {
22-
let handlerMutex: Mutex<Handler?>
20+
// We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today.
21+
// We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this
22+
// sadly crashes the compiler today.
23+
package final class NewLambdaRuntime<Handler>: @unchecked Sendable where Handler: StreamingLambdaHandler {
24+
// TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore
25+
let handlerMutex: NIOLockedValueBox<Optional<Handler>>
2326
let logger: Logger
2427
let eventLoop: EventLoop
2528

@@ -28,7 +31,7 @@ package final class NewLambdaRuntime<Handler>: Sendable where Handler: Streaming
2831
eventLoop: EventLoop = Lambda.defaultEventLoop,
2932
logger: Logger = Logger(label: "LambdaRuntime")
3033
) {
31-
self.handlerMutex = Mutex(handler)
34+
self.handlerMutex = NIOLockedValueBox(handler)
3235
self.eventLoop = eventLoop
3336
self.logger = logger
3437
}
@@ -42,11 +45,10 @@ package final class NewLambdaRuntime<Handler>: Sendable where Handler: Streaming
4245
let ip = String(ipAndPort[0])
4346
guard let port = Int(ipAndPort[1]) else { throw NewLambdaRuntimeError(code: .invalidPort) }
4447

45-
let handler = self.handlerMutex.withLock { maybeHandler in
46-
defer {
47-
maybeHandler = nil
48-
}
49-
return maybeHandler
48+
let handler = self.handlerMutex.withLockedValue { handler in
49+
let result = handler
50+
handler = nil
51+
return result
5052
}
5153

5254
guard let handler else {

0 commit comments

Comments
 (0)