1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:47:34 +00:00

Kernel: Make sure threads which don't do any syscalls are terminated

Steps to reproduce:

$ cat loop.c
int main() { for (;;); }
$ gcc -o loop loop.c
$ ./loop

Terminating this process wasn't previously possible because we only
checked whether the thread should be terminated on syscall exit.
This commit is contained in:
Gunnar Beutner 2021-06-19 11:27:20 +02:00 committed by Andreas Kling
parent c980a51776
commit 3c3a1726df
3 changed files with 20 additions and 0 deletions

View file

@ -1134,6 +1134,9 @@ public:
bool is_profiling_suppressed() const { return m_is_profiling_suppressed; }
void set_profiling_suppressed() { m_is_profiling_suppressed = true; }
bool may_die_immediately() const { return m_may_die_immediately; }
void set_may_die_immediately(bool flag) { m_may_die_immediately = flag; }
private:
Thread(NonnullRefPtr<Process>, NonnullOwnPtr<Region>, NonnullRefPtr<Timer>);
@ -1227,6 +1230,7 @@ private:
Optional<Range> m_thread_specific_range;
Array<SignalActionData, NSIG> m_signal_action_data;
Blocker* m_blocker { nullptr };
bool m_may_die_immediately { true };
#if LOCK_DEBUG
struct HoldingLockInfo {