#ifndef __KERNEL_HANDLE_H #define __KERNEL_HANDLE_H #ifdef __cplusplus extern "C" { #endif #include <kernel/thread.h> typedef struct handle_t handle_t; struct handle_t { handle_t *next; bool signal; byte refs; struct process_t* process; const char* file; int line; thread_queue_t queue; }; void* _hndAlloc(size_t size, struct process_t* proc, const char* file, int line); #define hndAlloc(size, proc) _hndAlloc(size, proc, __FILE__, __LINE__); int hndAddRef(void* buf); int hndFree(void* buf); void hndSignal(void* buf, bool signal); bool hndIsSignalled(void* buf); void hndEnum(struct process_t* proc); #define hndHandle(buf) ((handle_t*) (buf) - 1) #ifdef __cplusplus } #endif #endif