2 Copyright © 2015, The AROS Development Team. All rights reserved.
8 #include <aros/debug.h>
9 #include <aros/symbolsets.h>
11 #include <proto/exec.h>
12 #include <proto/kernel.h>
14 #include "taskres_intern.h"
16 extern struct TaskResBase
*internTaskResBase
;
18 void TaskResAddTask(struct Task
*task
)
20 struct TaskListEntry
*newEntry
;
24 if the list is locked, defer tasks addition until it is unlocked
26 if ((newEntry
= AllocMem(sizeof(struct TaskListEntry
), MEMF_CLEAR
)) != NULL
)
28 newEntry
->tle_Task
= task
;
29 AddTail(&internTaskResBase
->trb_TaskList
, &newEntry
->tle_Node
);
33 AROS_LH3(APTR
, AddTask
,
34 AROS_LHA(struct Task
*, task
, A1
),
35 AROS_LHA(APTR
, initialPC
, A2
),
36 AROS_LHA(APTR
, finalPC
, A3
),
37 struct ExecBase
*, SysBase
, 47, Task
)
43 D(bug("[TaskRes] AddTask()\n"));
45 newTask
= AROS_CALL3(APTR
, internTaskResBase
->trb_AddTask
,
46 AROS_LCA(struct Task
*, task
, A1
),
47 AROS_LCA(APTR
, initialPC
, A2
),
48 AROS_LCA(APTR
, finalPC
, A3
),
49 struct ExecBase
*, SysBase
);
52 TaskResAddTask(newTask
);
59 AROS_LH4(APTR
, NewAddTask
,
60 AROS_LHA(struct Task
*, task
, A1
),
61 AROS_LHA(APTR
, initialPC
, A2
),
62 AROS_LHA(APTR
, finalPC
, A3
),
63 AROS_LHA(struct TagItem
*, tagList
, A4
),
64 struct ExecBase
*, SysBase
, 176, Task
)
70 D(bug("[TaskRes] NewAddTask()\n"));
72 newTask
= AROS_CALL4(APTR
, internTaskResBase
->trb_NewAddTask
,
73 AROS_LCA(struct Task
*, task
, A1
),
74 AROS_LCA(APTR
, initialPC
, A2
),
75 AROS_LCA(APTR
, finalPC
, A3
),
76 AROS_LCA(struct TagItem
*, tagList
, A4
),
77 struct ExecBase
*, SysBase
);
80 TaskResAddTask(newTask
);
87 AROS_LH1(void, RemTask
,
88 AROS_LHA(struct Task
*, task
, A1
),
89 struct ExecBase
*, SysBase
, 48, Task
)
93 struct TaskListEntry
*tmpEntry
;
95 D(bug("[TaskRes] RemTask()\n"));
97 AROS_CALL1(APTR
, internTaskResBase
->trb_RemTask
,
98 AROS_LCA(struct Task
*, task
, A1
),
99 struct ExecBase
*, SysBase
);
101 ForeachNode(&internTaskResBase
->trb_TaskList
, tmpEntry
)
103 if (tmpEntry
->tle_Task
== task
)
107 if the list is locked flag the entry to be removed,
108 else remove it immediately
110 Remove(&tmpEntry
->tle_Node
);
111 FreeMem(tmpEntry
, sizeof(struct TaskListEntry
));