summaryrefslogtreecommitdiff
path: root/src/os/osDestroyThread.c
diff options
context:
space:
mode:
authorFaris Awan <58312479+farisawan-2000@users.noreply.github.com>2021-04-28 00:35:30 -0400
committerGitHub <noreply@github.com>2021-04-27 22:35:30 -0600
commit5c231135925adaf51e9ba366b95d4c5574c74ac8 (patch)
tree81ba79e16a091332073a13b2de3dfaf6a44ad1ac /src/os/osDestroyThread.c
parentf4532f26bb7c127f20d43983964236c891f3f419 (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.c37
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);
+}