diff options
Diffstat (limited to 'libgo/runtime/runtime.h')
-rw-r--r-- | libgo/runtime/runtime.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libgo/runtime/runtime.h b/libgo/runtime/runtime.h index 00443197095..1c7ede92722 100644 --- a/libgo/runtime/runtime.h +++ b/libgo/runtime/runtime.h @@ -56,6 +56,8 @@ typedef union Note Note; typedef struct MCache MCache; typedef struct FixAlloc FixAlloc; typedef struct Hchan Hchan; +typedef struct Timers Timers; +typedef struct Timer Timer; typedef struct __go_open_array Slice; typedef struct __go_string String; @@ -190,6 +192,38 @@ enum { }; #endif +struct Timers +{ + Lock; + G *timerproc; + bool sleeping; + bool rescheduling; + Note waitnote; + Timer **t; + int32 len; + int32 cap; +}; + +// Package time knows the layout of this structure. +// If this struct changes, adjust ../time/sleep.go:/runtimeTimer. +struct Timer +{ + int32 i; // heap index + + // Timer wakes up at when, and then at when+period, ... (period > 0 only) + // each time calling f(now, arg) in the timer goroutine, so f must be + // a well-behaved function and not block. + int64 when; + int64 period; + void (*f)(int64, Eface); + Eface arg; +}; + +/* + * defined macros + * you need super-gopher-guru privilege + * to add this list. + */ #define nelem(x) (sizeof(x)/sizeof((x)[0])) #define nil ((void*)0) #define USED(v) ((void) v) @@ -229,6 +263,8 @@ G* runtime_malg(int32, byte**, size_t*); void runtime_minit(void); void runtime_mallocinit(void); void runtime_gosched(void); +void runtime_tsleep(int64); +M* runtime_newm(void); void runtime_goexit(void); void runtime_entersyscall(void) __asm__("libgo_syscall.syscall.entersyscall"); void runtime_exitsyscall(void) __asm__("libgo_syscall.syscall.exitsyscall"); @@ -341,3 +377,5 @@ void reflect_call(const struct __go_func_type *, const void *, _Bool, _Bool, #ifdef __rtems__ void __wrap_rtems_task_variable_add(void **); #endif + +void runtime_time_scan(void (*)(byte*, int64)); |