FPPS4/sys/kern/kern_callout.pas

51 lines
1.0 KiB
Plaintext

unit kern_callout;
{$mode ObjFPC}{$H+}
{$CALLING SysV_ABI_CDecl}
interface
uses
mqueue,
kern_mtx;
type
t_callout_func=procedure(arg:Pointer);
p_callout=^t_callout;
t_callout=record
c_queue:Pointer;
c_links:TAILQ_ENTRY;
c_time :Int64;
c_arg :Pointer;
c_func :t_callout_func;
c_lock :Pointer; //mtx/rwlock
c_flags:QWORD;
c_timer:THandle;
end;
const
CALLOUT_LOCAL_ALLOC =$0001; // was allocated from callfree
CALLOUT_ACTIVE =$0002; // callout is currently active
CALLOUT_PENDING =$0004; // callout is waiting for timeout
CALLOUT_MPSAFE =$0008; // callout handler is mp safe
CALLOUT_RETURNUNLOCKED=$0010; // handler returns with mtx unlocked
CALLOUT_SHAREDLOCK =$0020; // callout lock held in shared mode
CALLOUT_RWLOCK =$0040; // callout used rw lock
type
p_callout_cpu=^t_callout_cpu;
t_callout_cpu=record
cc_lock :mtx;
cc_curr :p_callout;
cc_calllist:TAILQ_HEAD;
cc_callfree:TAILQ_HEAD;
cc_cancel :Integer;
cc_waiting :Integer;
end;
implementation
end.