Lines Matching refs:tdat
43 struct tp_data *tdat = data;
49 pthread_mutex_lock(&tdat->lock);
51 if (!tdat->thread_exit && flist_empty(&tdat->work))
52 pthread_cond_wait(&tdat->cv, &tdat->lock);
54 if (!flist_empty(&tdat->work))
55 flist_splice_tail_init(&tdat->work, &work_list);
57 pthread_mutex_unlock(&tdat->lock);
60 if (tdat->thread_exit)
71 void tp_queue_work(struct tp_data *tdat, struct tp_work *work)
75 pthread_mutex_lock(&tdat->lock);
76 flist_add_tail(&work->list, &tdat->work);
77 pthread_mutex_unlock(&tdat->lock);
79 pthread_cond_signal(&tdat->cv);
84 struct tp_data *tdat;
90 *tdatp = tdat = smalloc(sizeof(*tdat));
91 pthread_mutex_init(&tdat->lock, NULL);
92 INIT_FLIST_HEAD(&tdat->work);
93 pthread_cond_init(&tdat->cv, NULL);
94 pthread_cond_init(&tdat->sleep_cv, NULL);
96 ret = pthread_create(&tdat->thread, NULL, tp_thread, tdat);
103 struct tp_data *tdat = *tdatp;
106 if (!tdat)
109 pthread_mutex_lock(&tdat->lock);
110 tdat->thread_exit = 1;
111 pthread_mutex_unlock(&tdat->lock);
113 pthread_cond_signal(&tdat->cv);
115 pthread_join(tdat->thread, &ret);
117 sfree(tdat);