Changeset f74bbaf in mainline for kernel/generic/src/proc/task.c
- Timestamp:
- 2007-04-09T06:13:24Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d0b1443
- Parents:
- 261595b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/task.c
r261595b rf74bbaf 94 94 } 95 95 96 /** Kill all tasks except the current task. 97 * 98 */ 99 void task_done(void) 100 { 101 task_t *t; 102 do { /* Repeat until there are any tasks except TASK */ 103 104 /* Messing with task structures, avoid deadlock */ 105 ipl_t ipl = interrupts_disable(); 106 spinlock_lock(&tasks_lock); 107 108 t = NULL; 109 link_t *cur; 110 for (cur = tasks_btree.leaf_head.next; cur != &tasks_btree.leaf_head; cur = cur->next) { 111 btree_node_t *node = list_get_instance(cur, btree_node_t, leaf_link); 112 113 unsigned int i; 114 for (i = 0; i < node->keys; i++) { 115 if ((task_t *) node->value[i] != TASK) { 116 t = (task_t *) node->value[i]; 117 break; 118 } 119 } 120 } 121 122 if (t != NULL) { 123 task_id_t id = t->taskid; 124 125 spinlock_unlock(&tasks_lock); 126 interrupts_restore(ipl); 127 128 #ifdef CONFIG_DEBUG 129 printf("Killing task %llu\n", id); 130 #endif 131 task_kill(id); 132 } else { 133 spinlock_unlock(&tasks_lock); 134 interrupts_restore(ipl); 135 } 136 137 } while (t != NULL); 138 } 96 139 97 140 /** Create new task … … 374 417 ipl_t ipl; 375 418 376 /* Messing with t hreadstructures, avoid deadlock */419 /* Messing with task structures, avoid deadlock */ 377 420 ipl = interrupts_disable(); 378 421 spinlock_lock(&tasks_lock);
Note:
See TracChangeset
for help on using the changeset viewer.