Ignore:
File:
1 edited

Legend:

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

    rd3808d3 re535eeb  
    11/*
    2  * Copyright (c) 2010 Jakub Jermar
     2 * Copyright (c) 2001-2004 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    210210        btree_create(&ta->futexes);
    211211       
    212         /*
    213          * Get a reference to the address space.
    214          */
    215         as_hold(ta->as);
    216 
    217212        ipl = interrupts_disable();
     213        atomic_inc(&as->refcount);
    218214        spinlock_lock(&tasks_lock);
    219215        ta->taskid = ++task_counter;
     
    254250         * Drop our reference to the address space.
    255251         */
    256         as_release(t->as);
     252        if (atomic_predec(&t->as->refcount) == 0)
     253                as_destroy(t->as);
    257254       
    258255        slab_free(task_slab, t);
    259 }
    260 
    261 /** Hold a reference to a task.
    262  *
    263  * Holding a reference to a task prevents destruction of that task.
    264  *
    265  * @param t             Task to be held.
    266  */
    267 void task_hold(task_t *t)
    268 {
    269         atomic_inc(&t->refcount);
    270 }
    271 
    272 /** Release a reference to a task.
    273  *
    274  * The last one to release a reference to a task destroys the task.
    275  *
    276  * @param t             Task to be released.
    277  */
    278 void task_release(task_t *t)
    279 {
    280         if ((atomic_predec(&t->refcount)) == 0)
    281                 task_destroy(t);
     256        TASK = NULL;
    282257}
    283258
Note: See TracChangeset for help on using the changeset viewer.