Changeset f74bbaf in mainline for kernel/generic/src/proc/task.c


Ignore:
Timestamp:
2007-04-09T06:13:24Z (17 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d0b1443
Parents:
261595b
Message:

start shutdown infrastructure

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/proc/task.c

    r261595b rf74bbaf  
    9494}
    9595
     96/** Kill all tasks except the current task.
     97 *
     98 */
     99void 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}
    96139
    97140/** Create new task
     
    374417        ipl_t ipl;
    375418       
    376         /* Messing with thread structures, avoid deadlock */
     419        /* Messing with task structures, avoid deadlock */
    377420        ipl = interrupts_disable();
    378421        spinlock_lock(&tasks_lock);
Note: See TracChangeset for help on using the changeset viewer.