Subversion Repositories HelenOS

Rev

Rev 4377 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4377 Rev 4692
Line 52... Line 52...
52
#include <print.h>
52
#include <print.h>
53
#include <errno.h>
53
#include <errno.h>
54
#include <func.h>
54
#include <func.h>
55
#include <string.h>
55
#include <string.h>
56
#include <syscall/copy.h>
56
#include <syscall/copy.h>
-
 
57
#include <macros.h>
-
 
58
#include <ipc/event.h>
57
 
59
 
58
/** Spinlock protecting the tasks_tree AVL tree. */
60
/** Spinlock protecting the tasks_tree AVL tree. */
59
SPINLOCK_INITIALIZE(tasks_lock);
61
SPINLOCK_INITIALIZE(tasks_lock);
60
 
62
 
61
/** AVL tree of active tasks.
63
/** AVL tree of active tasks.
Line 194... Line 196...
194
    avltree_node_initialize(&ta->tasks_tree_node);
196
    avltree_node_initialize(&ta->tasks_tree_node);
195
    ta->tasks_tree_node.key = ta->taskid;
197
    ta->tasks_tree_node.key = ta->taskid;
196
    avltree_insert(&tasks_tree, &ta->tasks_tree_node);
198
    avltree_insert(&tasks_tree, &ta->tasks_tree_node);
197
    spinlock_unlock(&tasks_lock);
199
    spinlock_unlock(&tasks_lock);
198
    interrupts_restore(ipl);
200
    interrupts_restore(ipl);
199
 
201
   
-
 
202
    /*
-
 
203
     * Notify about task creation.
-
 
204
     */
-
 
205
    if (event_is_subscribed(EVENT_WAIT))
-
 
206
        event_notify_3(EVENT_WAIT, TASK_CREATE, LOWER32(ta->taskid),
-
 
207
            UPPER32(ta->taskid));
-
 
208
   
200
    return ta;
209
    return ta;
201
}
210
}
202
 
211
 
203
/** Destroy task.
212
/** Destroy task.
204
 *
213
 *
Line 227... Line 236...
227
     * Drop our reference to the address space.
236
     * Drop our reference to the address space.
228
     */
237
     */
229
    if (atomic_predec(&t->as->refcount) == 0)
238
    if (atomic_predec(&t->as->refcount) == 0)
230
        as_destroy(t->as);
239
        as_destroy(t->as);
231
   
240
   
-
 
241
    /*
-
 
242
     * Notify about task destruction.
-
 
243
     */
-
 
244
    if (event_is_subscribed(EVENT_WAIT))
-
 
245
        event_notify_3(EVENT_WAIT, TASK_DESTROY, LOWER32(t->taskid),
-
 
246
            UPPER32(t->taskid));
-
 
247
   
232
    free(t);
248
    free(t);
233
    TASK = NULL;
249
    TASK = NULL;
234
}
250
}
235
 
251
 
236
/** Syscall for reading task ID from userspace.
252
/** Syscall for reading task ID from userspace.