Work on debugging race conditions.
Ports and channels have been moved to the kernel pool, since they've been known to outlive their associated task. This probably isn't the right thing to do, the life cycle needs fixed instead. Some refactorying in memory_region.cpp. Added a helper function to increment and decrement the allocation counter. This makes it easier to switch between atomic and non-atomic increments. Using atomic increments for now, although this still does not fix the problem.
This commit is contained in:
@@ -401,6 +401,7 @@ rust_task::transition(rust_task_list *src, rust_task_list *dst) {
|
||||
|
||||
void
|
||||
rust_task::block(rust_cond *on, const char* name) {
|
||||
scoped_lock with(lock);
|
||||
LOG(this, task, "Blocking on 0x%" PRIxPTR ", cond: 0x%" PRIxPTR,
|
||||
(uintptr_t) on, (uintptr_t) cond);
|
||||
A(sched, cond == NULL, "Cannot block an already blocked task.");
|
||||
@@ -413,6 +414,7 @@ rust_task::block(rust_cond *on, const char* name) {
|
||||
|
||||
void
|
||||
rust_task::wakeup(rust_cond *from) {
|
||||
scoped_lock with(lock);
|
||||
A(sched, cond != NULL, "Cannot wake up unblocked task.");
|
||||
LOG(this, task, "Blocked on 0x%" PRIxPTR " woken up on 0x%" PRIxPTR,
|
||||
(uintptr_t) cond, (uintptr_t) from);
|
||||
@@ -430,6 +432,7 @@ rust_task::wakeup(rust_cond *from) {
|
||||
|
||||
void
|
||||
rust_task::die() {
|
||||
scoped_lock with(lock);
|
||||
transition(&sched->running_tasks, &sched->dead_tasks);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user