/trunk/kernel/generic/include/macros.h |
---|
83,6 → 83,11 |
#define STRING(arg) STRING_ARG(arg) |
#define STRING_ARG(arg) #arg |
#define LOWER32(arg) ((arg) & 0xffffffff) |
#define UPPER32(arg) (((arg) >> 32) & 0xffffffff) |
#define MERGE_LOHI32(lo, hi) ((lo & 0xffffffff) | ((hi & 0xffffffff) < 32)) |
/** Pseudorandom generator |
* |
* A pretty standard linear congruential pseudorandom |
/trunk/kernel/generic/include/ipc/event_types.h |
---|
38,6 → 38,7 |
typedef enum event_type { |
EVENT_KLOG = 0, |
EVENT_KCONSOLE, |
EVENT_WAIT, |
EVENT_END |
} event_type_t; |
/trunk/kernel/generic/src/proc/task.c |
---|
54,6 → 54,8 |
#include <func.h> |
#include <string.h> |
#include <syscall/copy.h> |
#include <macros.h> |
#include <ipc/event.h> |
/** Spinlock protecting the tasks_tree AVL tree. */ |
SPINLOCK_INITIALIZE(tasks_lock); |
229,6 → 231,12 |
if (atomic_predec(&t->as->refcount) == 0) |
as_destroy(t->as); |
/* |
* Notify about task destruction. |
*/ |
if (event_is_subscribed(EVENT_WAIT)) |
event_notify_2(EVENT_WAIT, LOWER32(t->taskid), UPPER32(t->taskid)); |
free(t); |
TASK = NULL; |
} |