@@ -84,7 +84,7 @@ internal struct WasiFetcher: Sendable {
8484
8585 // Register the backend
8686 if Fastly . Environment. viceroy, request. backend != " localhost " {
87- try registerDynamicBackend ( request. backend, for: httpRequest, ssl: urlComponents. scheme == " https " )
87+ try await dynamicBackends . register ( request. backend, for: httpRequest, ssl: urlComponents. scheme == " https " )
8888 }
8989
9090 // Issue async request
@@ -119,25 +119,30 @@ internal struct WasiFetcher: Sendable {
119119 }
120120 }
121121 }
122+ }
122123
123- private static var dynamicBackends : Set < String > = [ ]
124+ extension WasiFetcher {
125+ private static let dynamicBackends = DynamicBackendRepository ( )
124126
125- private static func registerDynamicBackend( _ backend: String , for request: Fastly . Request , ssl: Bool ) throws {
126- // Make sure we didn't already register the backend
127- guard dynamicBackends. contains ( backend) == false else {
128- return
129- }
127+ private actor DynamicBackendRepository {
130128
131- // Attempt to register the backend
132- do {
133- try request. registerDynamicBackend ( name: backend, target: backend, options: . init( ssl: ssl) )
134- } catch WasiStatus . unexpected {
135- // ignore
136- } catch {
137- throw error
138- }
129+ private var state : Set < String > = [ ]
130+
131+ func register( _ backend: String , for request: Fastly . Request , ssl: Bool ) throws {
132+ // Make sure we didn't already register the backend
133+ guard !state. contains ( backend) else { return }
139134
140- // Mark the backend as registered
141- dynamicBackends. insert ( backend)
135+ // Mark the backend as registered
136+ defer { state. insert ( backend) }
137+
138+ // Attempt to register the backend
139+ do {
140+ try request. registerDynamicBackend ( name: backend, target: backend, options: . init( ssl: ssl) )
141+ } catch WasiStatus . unexpected {
142+ // ignore
143+ } catch {
144+ throw error
145+ }
146+ }
142147 }
143148}
0 commit comments