summaryrefslogtreecommitdiff
path: root/src/libultra/os/stoptimer.c
blob: e8dbdbd2cf8e7d2115f441dd87e435184ba93d48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "ultra64.h"

s32 osStopTimer(OSTimer* timer) {
    register u32 prevInt;
    OSTimer* next;

    if (!timer->next) {
        return -1;
    }

    prevInt = __osDisableInt();

    next = timer->next;
    if (next != __osTimerList) {
        next->value += timer->value;
    }

    timer->prev->next = timer->next;
    timer->next->prev = timer->prev;
    timer->next = NULL;
    timer->prev = NULL;
    if (__osTimerList->next == __osTimerList) {
        __osSetCompare(0);
    }

    __osRestoreInt(prevInt);
    return 0;
}