NOTE: shared_from_this() doesn't work from constructor
| 112 | |
| 113 | // NOTE: shared_from_this() doesn't work from constructor |
| 114 | void Init() { |
| 115 | // XXX this pattern appears in several places, factor it out? |
| 116 | atfork_handler_ = std::make_shared<AtForkHandler>( |
| 117 | /*before=*/ |
| 118 | [weak_self = std::weak_ptr<SignalStopState>(shared_from_this())] { |
| 119 | auto self = weak_self.lock(); |
| 120 | if (self) { |
| 121 | self->BeforeFork(); |
| 122 | } |
| 123 | return self; |
| 124 | }, |
| 125 | /*parent_after=*/ |
| 126 | [](std::any token) { |
| 127 | auto self = std::any_cast<std::shared_ptr<SignalStopState>>(std::move(token)); |
| 128 | self->ParentAfterFork(); |
| 129 | }, |
| 130 | /*child_after=*/ |
| 131 | [](std::any token) { |
| 132 | auto self = std::any_cast<std::shared_ptr<SignalStopState>>(std::move(token)); |
| 133 | self->ChildAfterFork(); |
| 134 | }); |
| 135 | RegisterAtFork(atfork_handler_); |
| 136 | } |
| 137 | |
| 138 | Status RegisterHandlers(const std::vector<int>& signals) { |
| 139 | std::lock_guard<std::mutex> lock(mutex_); |
no test coverage detected