Skip to content

Commit 56fca2a

Browse files
Fixed test/Distributed/Runtime/distributed_actor_deinit.swift in optimized mode
1 parent 6d26514 commit 56fca2a

File tree

1 file changed

+30
-40
lines changed

1 file changed

+30
-40
lines changed

test/Distributed/Runtime/distributed_actor_deinit.swift

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,16 @@ typealias DefaultDistributedActorSystem = FakeActorSystem
279279

280280
func test() {
281281
let group = DispatchGroup()
282+
var dummy: AnyObject?
283+
284+
func check(factory: () -> AnyObject) {
285+
dummy = factory()
286+
// Test requires actor system to be released before the actor,
287+
// so that release of the actor system from actor deinit is the last one
288+
group.enter()
289+
dummy = nil
290+
group.wait()
291+
}
282292

283293
// no lifecycle things make sense for a normal actor, double check we didn't emit them
284294
print("before A")
@@ -287,117 +297,97 @@ func test() {
287297
// CHECK: before A
288298
// CHECK: after A
289299

290-
group.enter()
291-
_ = { () -> DA in
300+
check {
292301
DA(system: DefaultDistributedActorSystem(group: group))
293-
}()
294-
group.wait()
302+
}
295303
// CHECK: assign type:DA, address:[[ADDRESS:.*]]
296304
// CHECK: ready actor:main.DA, address:ActorAddress(address: "[[ADDR1:addr-[0-9]]]")
297305
// CHECK: resign address:ActorAddress(address: "[[ADDR1]]")
298306
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
299307

300-
group.enter()
301-
_ = { () -> DA_userDefined in
308+
check {
302309
DA_userDefined(system: DefaultDistributedActorSystem(group: group))
303-
}()
304-
group.wait()
310+
}
305311
// CHECK: assign type:DA_userDefined, address:[[ADDRESS:.*]]
306312
// CHECK: ready actor:main.DA_userDefined, address:ActorAddress(address: "[[ADDR2:addr-[0-9]]]")
307313
// CHECK: resign address:ActorAddress(address: "[[ADDR2]]")
308314
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
309315

310316
// resign must happen as the _last thing_ after user-deinit completed
311-
group.enter()
312-
_ = { () -> DA_userDefined_nonisolated in
317+
check {
313318
DA_userDefined_nonisolated(system: DefaultDistributedActorSystem(group: group))
314-
}()
315-
group.wait()
319+
}
316320
// CHECK: assign type:DA_userDefined_nonisolated, address:[[ADDRESS:.*]]
317321
// CHECK: ready actor:main.DA_userDefined_nonisolated, address:ActorAddress(address: "[[ADDR3:addr-[0-9]]]")
318322
// CHECK: Deinitializing ActorAddress(address: "[[ADDR3]]") remote:false isolated:false mainThread:true
319323
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR3]]")
320324
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
321325

322326
// resign must happen as the _last thing_ after user-deinit completed
323-
group.enter()
324-
_ = { () -> DA_userDefined_isolated in
327+
check {
325328
DA_userDefined_isolated(system: DefaultDistributedActorSystem(group: group))
326-
}()
327-
group.wait()
329+
}
328330
// CHECK: assign type:DA_userDefined_isolated, address:[[ADDRESS:.*]]
329331
// CHECK: ready actor:main.DA_userDefined_isolated, address:ActorAddress(address: "[[ADDR4:addr-[0-9]]]")
330332
// CHECK: Deinitializing ActorAddress(address: "[[ADDR4]]") remote:false isolated:true mainThread:true
331333
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR4]]")
332334
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=false mainThread=true
333335

334336
// resign must happen as the _last thing_ after user-deinit completed
335-
group.enter()
336-
_ = { () -> DA_state_nonisolated in
337+
check {
337338
DA_state_nonisolated(name: "Foo", age:37, system: DefaultDistributedActorSystem(group: group))
338-
}()
339-
group.wait()
339+
}
340340
// CHECK: assign type:DA_state_nonisolated, address:[[ADDRESS:.*]]
341341
// CHECK: ready actor:main.DA_state_nonisolated, address:ActorAddress(address: "[[ADDR5:addr-[0-9]]]")
342342
// CHECK: Deinitializing ActorAddress(address: "[[ADDR5]]") name=Foo age=37 remote:false isolated:false mainThread:true
343343
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR5]]")
344344
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
345345

346346
// resign must happen as the _last thing_ after user-deinit completed
347-
group.enter()
348-
_ = { () -> DA_state_isolated in
347+
check {
349348
DA_state_isolated(name: "Bar", age:42, system: DefaultDistributedActorSystem(group: group))
350-
}()
351-
group.wait()
349+
}
352350
// CHECK: assign type:DA_state_isolated, address:[[ADDRESS:.*]]
353351
// CHECK: ready actor:main.DA_state_isolated, address:ActorAddress(address: "[[ADDR6:addr-[0-9]]]")
354352
// CHECK: Deinitializing ActorAddress(address: "[[ADDR6]]") name=Bar age=42 remote:false isolated:true mainThread:true
355353
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR6]]")
356354
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=false mainThread=true
357355

358356
// resign must happen as the _last thing_ after user-deinit completed
359-
group.enter()
360-
_ = { () -> DA_state_isolated_on_another in
357+
check {
361358
DA_state_isolated_on_another(name: "Baz", age:57, system: DefaultDistributedActorSystem(group: group))
362-
}()
363-
group.wait()
359+
}
364360
// CHECK: assign type:DA_state_isolated_on_another, address:[[ADDRESS:.*]]
365361
// CHECK: ready actor:main.DA_state_isolated_on_another, address:ActorAddress(address: "[[ADDR6:addr-[0-9]]]")
366362
// CHECK: Deinitializing ActorAddress(address: "[[ADDR6]]") name=Baz age=57 remote:false isolated-self:false isolated-other:true mainThread:false
367363
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR6]]")
368364
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=false mainThread=false
369365

370366
// a remote actor should not resign it's address, it was never "assigned" it
371-
group.enter()
372-
_ = { () -> DA_userDefined_nonisolated in
367+
check {
373368
let address = ActorAddress(parse: "remote-1")
374369
return try! DA_userDefined_nonisolated.resolve(id: address, using: DefaultDistributedActorSystem(group: group))
375-
}()
376-
group.wait()
370+
}
377371
// CHECK-NEXT: resolve type:DA_userDefined_nonisolated, address:ActorAddress(address: "remote-1")
378372
// MUST NOT run deinit body for a remote distributed actor
379373
// CHECK-NOT: Deinitializing ActorAddress(address: "remote-1")
380374
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
381375

382376
// a remote actor should not resign it's address, it was never "assigned" it
383-
group.enter()
384-
_ = { () -> DA_userDefined_isolated in
377+
check {
385378
let address = ActorAddress(parse: "remote-2")
386379
return try! DA_userDefined_isolated.resolve(id: address, using: DefaultDistributedActorSystem(group: group))
387-
}()
388-
group.wait()
380+
}
389381
// CHECK-NEXT: resolve type:DA_userDefined_isolated, address:ActorAddress(address: "remote-2")
390382
// MUST NOT run deinit body for a remote distributed actor
391383
// CHECK-NOT: Deinitializing ActorAddress(address: "remote-2")
392384
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
393385

394386
// a remote actor should not resign it's address, it was never "assigned" it
395-
group.enter()
396-
_ = { () -> DA_state_isolated_on_another in
387+
check {
397388
let address = ActorAddress(parse: "remote-3")
398389
return try! DA_state_isolated_on_another.resolve(id: address, using: DefaultDistributedActorSystem(group: group))
399-
}()
400-
group.wait()
390+
}
401391
// CHECK-NEXT: resolve type:DA_state_isolated_on_another, address:ActorAddress(address: "remote-3")
402392
// MUST NOT run deinit body for a remote distributed actor
403393
// CHECK-NOT: Deinitializing ActorAddress(address: "remote-3")

0 commit comments

Comments
 (0)