void __lwp_sysinit() { __lwp_objmgr_initinfo(&_lwp_thr_objects,LWP_MAX_THREADS,sizeof(lwp_cntrl)); __lwp_objmgr_initinfo(&_lwp_tqueue_objects,LWP_MAX_TQUEUES,sizeof(tqueue_st)); // create idle thread, is needed iff all threads are locked on a queue _thr_idle = (lwp_cntrl*)__lwp_objmgr_allocate(&_lwp_thr_objects); __lwp_thread_init(_thr_idle,NULL,0,255,0,TRUE); _thr_executing = _thr_heir = _thr_idle; __lwp_thread_start(_thr_idle,idle_func,NULL); __lwp_objmgr_open(&_lwp_thr_objects,&_thr_idle->object); // create main thread, as this is our entry point // for every GC application. _thr_main = (lwp_cntrl*)__lwp_objmgr_allocate(&_lwp_thr_objects); __lwp_thread_init(_thr_main,__stack_end,((u32)__stack_addr-(u32)__stack_end),191,0,TRUE); __lwp_thread_start(_thr_main,(void*)__crtmain,NULL); __lwp_objmgr_open(&_lwp_thr_objects,&_thr_main->object); }
void __lwp_cond_init() { __lwp_objmgr_initinfo(&_lwp_cond_objects,LWP_MAX_CONDVARS,sizeof(cond_st)); }
void __lwp_mqbox_init() { __lwp_objmgr_initinfo(&_lwp_mqbox_objects,LWP_MAX_MQUEUES,sizeof(mqbox_st)); }