|
|
@ -66,10 +66,9 @@ TEST(ThreadPoolTest, CanSurviveFork) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
gpr_log(GPR_INFO, "prepare fork"); |
|
|
|
gpr_log(GPR_INFO, "prepare fork"); |
|
|
|
p.PrepareFork(); |
|
|
|
p.PrepareFork(); |
|
|
|
gpr_log(GPR_INFO, "wait for notification"); |
|
|
|
|
|
|
|
n.WaitForNotification(); |
|
|
|
|
|
|
|
gpr_log(GPR_INFO, "postfork child"); |
|
|
|
gpr_log(GPR_INFO, "postfork child"); |
|
|
|
p.PostforkChild(); |
|
|
|
p.PostforkChild(); |
|
|
|
|
|
|
|
n.WaitForNotification(); |
|
|
|
grpc_core::Notification n2; |
|
|
|
grpc_core::Notification n2; |
|
|
|
gpr_log(GPR_INFO, "run callback 3"); |
|
|
|
gpr_log(GPR_INFO, "run callback 3"); |
|
|
|
p.Run([&n2] { |
|
|
|
p.Run([&n2] { |
|
|
@ -85,7 +84,10 @@ void ScheduleSelf(ThreadPool* p) { |
|
|
|
p->Run([p] { ScheduleSelf(p); }); |
|
|
|
p->Run([p] { ScheduleSelf(p); }); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TEST(ThreadPoolDeathTest, CanDetectStucknessAtFork) { |
|
|
|
// This can be re-enabled if/when the thread pool is changed to quiesce
|
|
|
|
|
|
|
|
// pre-fork. For now, it cannot get stuck because callback execution is
|
|
|
|
|
|
|
|
// effectively paused until after the post-fork reboot.
|
|
|
|
|
|
|
|
TEST(ThreadPoolDeathTest, DISABLED_CanDetectStucknessAtFork) { |
|
|
|
ASSERT_DEATH_IF_SUPPORTED( |
|
|
|
ASSERT_DEATH_IF_SUPPORTED( |
|
|
|
[] { |
|
|
|
[] { |
|
|
|
gpr_set_log_verbosity(GPR_LOG_SEVERITY_ERROR); |
|
|
|
gpr_set_log_verbosity(GPR_LOG_SEVERITY_ERROR); |
|
|
|