Lines Matching refs:sch

61     struct mk_thread_scheduler *sch;  member
81 static void _mk_thread_entry_point(struct mk_thread_scheduler *sch) in _mk_thread_entry_point() argument
88 assert(sch); in _mk_thread_entry_point()
89 id = sch->running_id; in _mk_thread_entry_point()
90 dt = sch->dt[id]; in _mk_thread_entry_point()
98 sch->n_dthread--; in _mk_thread_entry_point()
99 sch->running_id = dt->parent_id; in _mk_thread_entry_point()
104 struct mk_thread_scheduler *sch; in mk_thread_open() local
106 sch = mk_mem_alloc(sizeof(*sch)); in mk_thread_open()
107 if (!sch) { in mk_thread_open()
111 sch->n_dthread = 0; in mk_thread_open()
112 sch->cap = DEFAULT_MK_THREAD_NUM; in mk_thread_open()
113 sch->running_id = -1; in mk_thread_open()
114 sch->dt = mk_mem_alloc_z(sizeof(struct mk_thread *) * sch->cap); in mk_thread_open()
115 if (!sch->dt) { in mk_thread_open()
116 mk_mem_free(sch); in mk_thread_open()
120 return sch; in mk_thread_open()
123 void mk_thread_close(struct mk_thread_scheduler *sch) in mk_thread_close() argument
128 for (i = 0; i < sch->cap; ++i) { in mk_thread_close()
129 dt = sch->dt[i]; in mk_thread_close()
134 mk_mem_free(sch->dt); in mk_thread_close()
135 sch->dt = NULL; in mk_thread_close()
136 mk_mem_free(sch); in mk_thread_close()
153 struct mk_thread_scheduler *sch; in mk_thread_create() local
156 sch = pthread_getspecific(mk_thread_scheduler); in mk_thread_create()
157 if (!sch) { in mk_thread_create()
158 sch = mk_thread_open(); in mk_thread_create()
159 assert(sch); in mk_thread_create()
160 pthread_setspecific(mk_thread_scheduler, (void *) sch); in mk_thread_create()
163 if (sch->n_dthread >= sch->cap) { in mk_thread_create()
164 id = sch->cap; in mk_thread_create()
166 p = mk_mem_realloc(sch->dt, sch->cap * 2 * sizeof(struct mk_thread *)); in mk_thread_create()
170 sch->dt = p; in mk_thread_create()
171 memset(sch->dt + sch->cap, 0, sizeof(struct mk_thread *) * sch->cap); in mk_thread_create()
172 sch->cap *= 2; in mk_thread_create()
175 for (i = 0; i < sch->cap; ++i) { in mk_thread_create()
176 id = (i + sch->cap) % sch->cap; in mk_thread_create()
177 if (sch->dt[id] == NULL || sch->dt[id]->status == MK_THREAD_DEAD) { in mk_thread_create()
184 if (sch->dt[id] && sch->dt[id]->status == MK_THREAD_DEAD) { in mk_thread_create()
185 _mk_thread_release(sch->dt[id]); in mk_thread_create()
186 sch->dt[id] = NULL; in mk_thread_create()
196 dt->sch = sch; in mk_thread_create()
203 sch->dt[id] = dt; in mk_thread_create()
204 sch->n_dthread++; in mk_thread_create()
227 struct mk_thread_scheduler *sch; in mk_thread_status() local
229 sch = pthread_getspecific(mk_thread_scheduler); in mk_thread_status()
230 assert(sch); in mk_thread_status()
231 assert(id >= 0 && id < sch->cap); in mk_thread_status()
232 if (!sch->dt[id]) return MK_THREAD_DEAD; in mk_thread_status()
233 return sch->dt[id]->status; in mk_thread_status()
247 struct mk_thread_scheduler *sch; in mk_thread_yield() local
249 sch = pthread_getspecific(mk_thread_scheduler); in mk_thread_yield()
250 assert(sch); in mk_thread_yield()
252 id = sch->running_id; in mk_thread_yield()
255 dt = sch->dt[id]; in mk_thread_yield()
257 sch->running_id = -1; in mk_thread_yield()
258 swapcontext(&dt->context, &sch->main); in mk_thread_yield()
272 struct mk_thread_scheduler *sch; in mk_thread_resume() local
274 sch = pthread_getspecific(mk_thread_scheduler); in mk_thread_resume()
275 assert(sch); in mk_thread_resume()
276 assert(id >= 0 && id < sch->cap); in mk_thread_resume()
279 if (sch->running_id != -1) { in mk_thread_resume()
280 running_dt = sch->dt[sch->running_id]; in mk_thread_resume()
283 dt = sch->dt[id]; in mk_thread_resume()
292 dt->parent_id = sch->running_id; in mk_thread_resume()
295 dt->context.uc_link = &sch->main; in mk_thread_resume()
297 sch->running_id = id; in mk_thread_resume()
299 makecontext(&dt->context, (void (*)(void))_mk_thread_entry_point, 1, sch); in mk_thread_resume()
303 swapcontext(&sch->main, &dt->context); in mk_thread_resume()
307 sch->running_id = id; in mk_thread_resume()
313 swapcontext(&sch->main, &dt->context); in mk_thread_resume()
329 struct mk_thread_scheduler *sch; in mk_thread_running() local
331 sch = pthread_getspecific(mk_thread_scheduler); in mk_thread_running()
332 assert(sch); in mk_thread_running()
333 return sch->running_id; in mk_thread_running()
338 struct mk_thread_scheduler *sch; in mk_thread_add_channel() local
342 sch = pthread_getspecific(mk_thread_scheduler); in mk_thread_add_channel()
343 assert(sch); in mk_thread_add_channel()
344 assert(id >= 0 && id < sch->cap); in mk_thread_add_channel()
345 dt = sch->dt[id]; in mk_thread_add_channel()