Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1588 → Rev 1587

/kernel/trunk/generic/src/proc/task.c
140,6 → 140,10
*/
void task_destroy(task_t *t)
{
spinlock_lock(&tasks_lock);
btree_remove(&tasks_btree, t->taskid, NULL);
spinlock_unlock(&tasks_lock);
 
task_destroy_arch(t);
btree_destroy(&t->futexes);
 
270,12 → 274,11
interrupts_restore(ipl);
return ENOENT;
}
 
spinlock_lock(&ta->lock);
ta->refcount++;
spinlock_unlock(&ta->lock);
 
btree_remove(&tasks_btree, ta->taskid, NULL);
spinlock_unlock(&tasks_lock);
t = thread_create(ktaskclnp, NULL, ta, 0, "ktaskclnp");
/kernel/trunk/generic/src/ddi/ddi.c
135,6 → 135,12
return ENOENT;
}
 
/*
* TODO: We are currently lacking support for task destroying.
* Once it is added to the kernel, we must take care to
* synchronize in a way that prevents race conditions here.
*/
/* Lock the task and release the lock protecting tasks_btree. */
spinlock_lock(&t->lock);
spinlock_unlock(&tasks_lock);
/kernel/trunk/generic/src/security/cap.c
112,15 → 112,10
interrupts_restore(ipl);
return (__native) ENOENT;
}
spinlock_unlock(&tasks_lock);
spinlock_lock(&t->lock);
cap_set(t, cap_get(t) | caps);
spinlock_unlock(&t->lock);
spinlock_unlock(&tasks_lock);
 
interrupts_restore(ipl);
return 0;
}
154,6 → 149,7
interrupts_restore(ipl);
return (__native) ENOENT;
}
spinlock_unlock(&tasks_lock);
 
/*
* Revoking capabilities is different from granting them in that
161,17 → 157,12
* doesn't have CAP_CAP.
*/
if (!(cap_get(TASK) & CAP_CAP) || !(t == TASK)) {
spinlock_unlock(&tasks_lock);
interrupts_restore(ipl);
return (__native) EPERM;
}
 
cap_set(t, cap_get(t) & ~caps);
spinlock_lock(&t->lock);
cap_set(t, cap_get(t) & ~caps);
spinlock_unlock(&t->lock);
 
spinlock_unlock(&tasks_lock);
 
interrupts_restore(ipl);
return 0;
}