On 3/17/20 12:07 PM, Derek Lesho wrote:
+BOOL is_wine_thread(void) +{ + return pthread_getspecific(wine_gst_key) != NULL; +} + +pthread_mutex_t cb_list_lock = PTHREAD_MUTEX_INITIALIZER; +pthread_cond_t cb_list_cond = PTHREAD_COND_INITIALIZER; +struct list cb_list = LIST_INIT(cb_list); + +void CALLBACK perform_cb(TP_CALLBACK_INSTANCE *instance, void *user) +{ + struct cb_data *cbdata = user; + + if (cbdata->type < GSTDEMUX_MAX) + perform_cb_gstdemux(cbdata); + + pthread_mutex_lock(&cbdata->lock); + cbdata->finished = 1; + pthread_cond_broadcast(&cbdata->cond); + pthread_mutex_unlock(&cbdata->lock); +}
I think these can be static now.
+ +static DWORD WINAPI dispatch_thread(void *user) +{ + struct cb_data *cbdata; + + CoInitializeEx(NULL, COINIT_MULTITHREADED); + + pthread_mutex_lock(&cb_list_lock); + + while(1){ + pthread_cond_wait(&cb_list_cond, &cb_list_lock); + + while(!list_empty(&cb_list)){ + cbdata = LIST_ENTRY(list_head(&cb_list), struct cb_data, entry); + list_remove(&cbdata->entry); + + TrySubmitThreadpoolCallback(&perform_cb, cbdata, NULL); + } + } + + pthread_mutex_unlock(&cb_list_lock); + + CoUninitialize(); + + return 0; +}
As long as you're moving code here, can you please improve the formatting a little? (i.e. space after "while", opening brace on a new line.)
+ default: + { + ERR("Wrong callback forwarder called\n"); + assert(0);
I think this belongs in a separate patch. Also, the ERR() seems unnecessary; the assert() gives you just as much information.