Lines Matching refs:ctx

37 static int event_create(struct event_ctx_impl *ctx)  in event_create()  argument
41 ret = pthread_cond_init(&ctx->condition, NULL); in event_create()
45 ret = pthread_mutex_init(&ctx->mutex, NULL); in event_create()
49 ctx->semval = ctx->ea->e[0].idx; in event_create()
50 mpp_log_f("with %u\n", ctx->semval); in event_create()
55 static void event_destroy(struct event_ctx_impl *ctx) in event_destroy() argument
57 pthread_cond_destroy(&ctx->condition); in event_destroy()
58 pthread_mutex_destroy(&ctx->mutex); in event_destroy()
62 static void event_init(struct event_ctx_impl *ctx) in event_init() argument
67 pthread_mutex_lock(&ctx->mutex); in event_init()
68 e_curr = &ctx->ea->e[ctx->event_idx % ctx->ea->cnt]; in event_init()
69 e_next = &ctx->ea->e[(++ctx->event_idx) % ctx->ea->cnt]; in event_init()
75 ctx->semval = e_next->idx - e_curr->idx; in event_init()
76 else if (ctx->ea->loop > 0) in event_init()
77 ctx->semval = e_next->idx + ctx->ea->loop - e_curr->idx; in event_init()
79 ctx->flag = 0; in event_init()
81 mpp_log_f("semval %u\n", ctx->semval); in event_init()
82 pthread_mutex_unlock(&ctx->mutex); in event_init()
97 static int event_timed_wait(struct event_ctx_impl *ctx, unsigned int milli_sec) in event_timed_wait() argument
112 pthread_mutex_lock(&ctx->mutex); in event_timed_wait()
113 while (ctx->semval > 0) { in event_timed_wait()
114 err = pthread_cond_timedwait(&ctx->condition, &ctx->mutex, &final_time); in event_timed_wait()
116 ctx->semval--; in event_timed_wait()
118 ctx->semval--; in event_timed_wait()
119 pthread_mutex_unlock(&ctx->mutex); in event_timed_wait()
124 static void event_down(struct event_ctx_impl *ctx) in event_down() argument
126 pthread_mutex_lock(&ctx->mutex); in event_down()
127 ctx->semval--; in event_down()
128 pthread_cond_signal(&ctx->condition); in event_down()
129 pthread_mutex_unlock(&ctx->mutex); in event_down()
135 struct event_ctx_impl *ctx = (struct event_ctx_impl *)param; in event_notify() local
137 if (ctx->flag) in event_notify()
138 event_down(ctx); in event_notify()
145 struct event_ctx_impl *ctx = (struct event_ctx_impl *)param; in event_trigger_thread() local
153 event_create(ctx); in event_trigger_thread()
156 ret = event_timed_wait(ctx, ctx->semval * 10000); in event_trigger_thread()
157 if (!ctx->flag) in event_trigger_thread()
170 curr - start_time, ctx->event_idx); in event_trigger_thread()
171 mpp_log("cnt %d\n", ctx->ea->cnt); in event_trigger_thread()
172 ctx->trigger(ctx->parent, ctx->ea->e[ctx->event_idx % ctx->ea->cnt].event); in event_trigger_thread()
175 event_init(ctx); in event_trigger_thread()
176 if (!ctx->flag) in event_trigger_thread()
180 event_destroy(ctx); in event_trigger_thread()
190 struct event_ctx_impl *ctx = (struct event_ctx_impl *)malloc(sizeof(*ctx)); in event_ctx_create() local
192 if (ctx == NULL) { in event_ctx_create()
199 ctx->event_idx = 0; in event_ctx_create()
200 ctx->ea = ea; in event_ctx_create()
202 ctx->notify = event_notify; in event_ctx_create()
203 ctx->trigger = trigger; in event_ctx_create()
204 ctx->parent = parent; in event_ctx_create()
206 ctx->flag = 1; in event_ctx_create()
207 pthread_create(&ctx->thr, NULL, event_trigger_thread, ctx); in event_ctx_create()
209 return (struct event_ctx *)ctx; in event_ctx_create()
212 void event_ctx_release(struct event_ctx *ctx) in event_ctx_release() argument
215 struct event_ctx_impl *ictx = (struct event_ctx_impl *)ctx; in event_ctx_release()
217 assert(ctx != NULL); in event_ctx_release()
250 struct event_ctx *ctx; in main() local
270 ctx = event_ctx_create(&ea, event_occur, NULL); in main()
275 ctx->notify((void*)ctx); in main()
278 event_ctx_release(ctx); in main()