-
-void XineEngine::lock_cb(void *user_data)
-{
- XineEngine &engine = *reinterpret_cast<XineEngine *>(user_data);
- pthread_t tid = pthread_self();
- if(tid==engine.locked_thread)
- ++engine.lock_count;
- else
- {
- engine.display_mutex->lock();
- engine.locked_thread = tid;
- engine.lock_count = 1;
- }
-}
-
-void XineEngine::unlock_cb(void *user_data)
-{
- XineEngine &engine = *reinterpret_cast<XineEngine *>(user_data);
- pthread_t tid = pthread_self();
- if(tid!=engine.locked_thread)
- throw logic_error("Unlock from non-locked thread");
- if(!--engine.lock_count)
- {
- engine.locked_thread = 0;
- engine.display_mutex->unlock();
- }
-}