| 159 | } |
| 160 | |
| 161 | auto TaskManager::SetSignalAction(int signum, const SignalAction& action, |
| 162 | SignalAction* old_action) -> Expected<void> { |
| 163 | auto* current = GetCurrentTask(); |
| 164 | if (!current || !current->aux) { |
| 165 | return std::unexpected(Error{ErrorCode::kTaskNoCurrentTask}); |
| 166 | } |
| 167 | |
| 168 | if (!SignalState::IsValid(signum)) { |
| 169 | return std::unexpected(Error{ErrorCode::kSignalInvalidNumber}); |
| 170 | } |
| 171 | |
| 172 | if (SignalState::IsUncatchable(signum)) { |
| 173 | return std::unexpected(Error{ErrorCode::kSignalUncatchable}); |
| 174 | } |
| 175 | |
| 176 | auto& signals = current->aux->signals; |
| 177 | |
| 178 | if (old_action) { |
| 179 | *old_action = signals.actions[signum]; |
| 180 | } |
| 181 | |
| 182 | signals.actions[signum] = action; |
| 183 | |
| 184 | klog::Debug("SetSignalAction: pid={} set handler for signal {} ({})", |
| 185 | current->pid, signum, SignalState::GetSignalName(signum)); |
| 186 | |
| 187 | return {}; |
| 188 | } |
| 189 | |
| 190 | auto TaskManager::SetSignalMask(int how, uint32_t set, uint32_t* oldset) |
| 191 | -> Expected<void> { |
no test coverage detected