diff -urN ref/include/linux/sched.h tuxsched/include/linux/sched.h --- ref/include/linux/sched.h Sat Apr 28 20:29:48 2001 +++ tuxsched/include/linux/sched.h Sun Apr 29 17:31:18 2001 @@ -396,6 +396,10 @@ int (*notifier)(void *priv); void *notifier_data; sigset_t *notifier_mask; + + /* TUX state */ + void *tux_info; + void (*tux_exit)(void); /* Thread group tracking */ u32 parent_exec_id; diff -urN ref/kernel/exit.c tuxsched/kernel/exit.c --- ref/kernel/exit.c Sat Apr 28 18:37:45 2001 +++ tuxsched/kernel/exit.c Sun Apr 29 17:30:54 2001 @@ -439,6 +439,13 @@ #ifdef CONFIG_BSD_PROCESS_ACCT acct_process(code); #endif + if (current->tux_info) { +#ifdef CONFIG_TUX_DEBUG + printk("Possibly unexpected TUX-thread exit(%ld) at %p?\n", + code, __builtin_return_address(0)); +#endif + current->tux_exit(); + } __exit_mm(tsk); lock_kernel(); diff -urN ref/kernel/fork.c tuxsched/kernel/fork.c --- ref/kernel/fork.c Sat Apr 28 18:37:45 2001 +++ tuxsched/kernel/fork.c Sun Apr 29 17:30:54 2001 @@ -574,6 +574,7 @@ goto fork_out; *p = *current; + p->tux_info = NULL; retval = -EAGAIN; if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur)