18 #include "wvwin32task.h"
23 #include "wvlinklist.h"
24 #include "wvstreamsdebugger.h"
25 #include "wvstringlist.h"
29 #define WVTASK_MAGIC 0x123678
45 typedef void TaskFunc(
void *userdata);
47 static int taskcount, numtasks, numrunning;
48 int volatile magic_number;
55 bool running, recycled;
59 ucontext_t func_call, func_return;
69 void start(WvStringParm _name, TaskFunc *_func,
void *_userdata);
70 bool isrunning()
const
73 int get_tid()
const {
return tid; }
74 WvString get_name()
const {
return name; }
88 static int volatile magic_number;
89 static WvTaskList all_tasks, free_tasks;
91 static void get_stack(
WvTask &task,
size_t size);
92 static void stackmaster();
93 static void _stackmaster();
94 static void do_task();
95 static void call_func(
WvTask *task);
97 static char *stacktop;
98 static ucontext_t stackmaster_task;
100 static WvTask *stack_target;
101 static ucontext_t get_stack_return;
103 static WvTask *current_task;
104 static ucontext_t toplevel;
109 #ifdef ENABLE_DELETE_DETECTOR
116 static void unlink();
118 WvTask *start(WvStringParm name,
119 WvTask::TaskFunc *func,
void *userdata,
120 size_t stacksize = 64*1024);
124 static int run(
WvTask &task,
int val = 1);
125 static int yield(
int val = 1);
128 {
return current_task; }
130 static const void *current_top_of_stack();
131 static size_t current_stacksize_limit();
135 WvStreamsDebugger::ResultCallback,
void *);
139 #endif // ifdef _WIN32