diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 908e2ab2..7fd98cd6 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -14,15 +14,11 @@ import Foundation import Logging -import NIOConcurrencyHelpers import NIOCore +import Synchronization -// We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. -// We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this -// sadly crashes the compiler today. -public final class LambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { - // TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore - let handlerMutex: NIOLockedValueBox +public final class LambdaRuntime: Sendable where Handler: StreamingLambdaHandler { + let handlerMutex: Mutex let logger: Logger let eventLoop: EventLoop @@ -31,7 +27,7 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St eventLoop: EventLoop = Lambda.defaultEventLoop, logger: Logger = Logger(label: "LambdaRuntime") ) { - self.handlerMutex = NIOLockedValueBox(handler) + self.handlerMutex = Mutex(handler) self.eventLoop = eventLoop self.logger = logger } @@ -45,7 +41,7 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St let ip = String(ipAndPort[0]) guard let port = Int(ipAndPort[1]) else { throw LambdaRuntimeError(code: .invalidPort) } - let handler = self.handlerMutex.withLockedValue { handler in + let handler = self.handlerMutex.withLock { handler in let result = handler handler = nil return result