A hack to get wq userspace threads to exit

上级 eecec35f
...@@ -74,5 +74,6 @@ main(int ac, char **av) ...@@ -74,5 +74,6 @@ main(int ac, char **av)
initwq(); initwq();
printf("%ld\n", du(open(".", 0))); printf("%ld\n", du(open(".", 0)));
wq_dump(); wq_dump();
exitwq();
return 0; return 0;
} }
...@@ -89,5 +89,6 @@ main(int argc, char *argv[]) ...@@ -89,5 +89,6 @@ main(int argc, char *argv[])
} }
wq_dump(); wq_dump();
exitwq();
return 0; return 0;
} }
...@@ -7,6 +7,7 @@ int wq_push(work *w); ...@@ -7,6 +7,7 @@ int wq_push(work *w);
void wq_dump(void); void wq_dump(void);
size_t wq_size(void); size_t wq_size(void);
void initwq(void); void initwq(void);
void exitwq(void);
struct work { struct work {
virtual void run() = 0; virtual void run() = 0;
......
...@@ -43,4 +43,9 @@ wqarch_init(void) ...@@ -43,4 +43,9 @@ wqarch_init(void)
{ {
} }
static inline void
wqarch_exit(void)
{
}
#define xprintf cprintf #define xprintf cprintf
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
typedef struct uspinlock wqlock_t; typedef struct uspinlock wqlock_t;
static pthread_key_t idkey; static pthread_key_t idkey;
static volatile int exiting;
int int
mycpuid(void) mycpuid(void)
...@@ -58,7 +59,7 @@ workerth(void *x) ...@@ -58,7 +59,7 @@ workerth(void *x)
setaffinity(c); setaffinity(c);
pthread_setspecific(idkey, (void*)c); pthread_setspecific(idkey, (void*)c);
while (1) while (!exiting)
wq_trywork(); wq_trywork();
return 0; return 0;
...@@ -83,6 +84,12 @@ wqarch_init(void) ...@@ -83,6 +84,12 @@ wqarch_init(void)
} }
} }
static inline void
wqarch_exit(void)
{
exiting = 1;
}
#define xprintf printf #define xprintf printf
#define pushcli() #define pushcli()
#define popcli() #define popcli()
...@@ -73,6 +73,12 @@ initwq(void) ...@@ -73,6 +73,12 @@ initwq(void)
wqarch_init(); wqarch_init();
} }
void
exitwq(void)
{
wqarch_exit();
}
// //
// wq // wq
// //
......
...@@ -83,6 +83,11 @@ wqarch_init(void) ...@@ -83,6 +83,11 @@ wqarch_init(void)
} }
} }
static inline void
wqarch_exit(void)
{
}
#define xprintf printf #define xprintf printf
#define pushcli() #define pushcli()
#define popcli() #define popcli()
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论