Oops, was starting one too many workers

上级 e8b5d13d
......@@ -6,6 +6,8 @@ struct padded_length {
};
#if defined (XV6_KERNEL)
#define NWORKERS (NCPU-1)
struct uwq;
struct uwq_worker {
......
......@@ -72,6 +72,8 @@ initworker(void)
int id;
forkt_setup(0);
id = nextid++;
if (id >= NCPU)
die("initworker: to man IDs");
pthread_setspecific(idkey, (void*)(u64)id);
while (1) {
if (!wq_trywork())
......@@ -86,7 +88,8 @@ wqarch_init(void)
if (pthread_key_create(&idkey, 0))
die("wqarch_init: pthread_key_create");
pthread_setspecific(idkey, 0);
int id = nextid++;
pthread_setspecific(idkey, (void*)(u64)id);
}
static inline void
......
......@@ -175,7 +175,7 @@ uwq::trywork(void)
return false;
int slot = -1;
for (int i = 0; i < NCPU; i++) {
for (int i = 0; i < NWORKERS; i++) {
if (worker_[i] == nullptr) {
if (slot == -1)
slot = i;
......@@ -189,7 +189,6 @@ uwq::trywork(void)
scoped_acquire lock1(&w->lock_);
proc* p = w->proc_;
cprintf("uwq::trywork: untested\n");
acquire(&p->lock);
p->cpuid = mycpuid();
release(&p->lock);
......@@ -229,7 +228,7 @@ uwq::finish(void)
bool gcnow = true;
scoped_acquire lock0(&lock_);
for (int i = 0; i < NCPU; i++) {
for (int i = 0; i < NWORKERS; i++) {
if (worker_[i] != nullptr) {
uwq_worker* w = worker_[i];
gcnow = false;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论