diff options
| author | Faris Awan <58312479+farisawan-2000@users.noreply.github.com> | 2021-04-28 00:35:30 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-27 22:35:30 -0600 |
| commit | 5c231135925adaf51e9ba366b95d4c5574c74ac8 (patch) | |
| tree | 81ba79e16a091332073a13b2de3dfaf6a44ad1ac /src/os/osDestroyThread.c | |
| parent | f4532f26bb7c127f20d43983964236c891f3f419 (diff) | |
Match/split all of libultra (#23)
* libultra from sm64 integrated; 3 libultra functions matched
* All of libultra done!
authored-by: farisawan-2000 <farisawan.2000@gmail.com>
Diffstat (limited to 'src/os/osDestroyThread.c')
| -rw-r--r-- | src/os/osDestroyThread.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/os/osDestroyThread.c b/src/os/osDestroyThread.c new file mode 100644 index 000000000..ef8520a23 --- /dev/null +++ b/src/os/osDestroyThread.c @@ -0,0 +1,37 @@ +#include "libultra_internal.h" + +void osDestroyThread(OSThread *thread) { + register s32 int_disabled; + register OSThread *s1; + register OSThread *s2; + + int_disabled = __osDisableInt(); + + if (thread == NULL) { + thread = __osRunningThread; + } else if (thread->state != OS_STATE_STOPPED) { + __osDequeueThread(thread->queue, thread); + } + + if (__osActiveQueue == thread) { + __osActiveQueue = __osActiveQueue->tlnext; + } else { + s1 = __osActiveQueue; + s2 = s1->tlnext; + while (s2 != NULL) { + if (s2 == thread) { + s1->tlnext = thread->tlnext; + break; + } else { + s1 = s2; + s2 = s1->tlnext; + } + } + } + + if (thread == __osRunningThread) { + __osDispatchThread(); + } + + __osRestoreInt(int_disabled); +} |
