VLC 4.0.0-dev
Loading...
Searching...
No Matches
Collaboration diagram for Mutual exclusion locks:

Data Structures

struct  vlc_mutex_t
 Mutex. More...
 

Macros

#define VLC_STATIC_MUTEX
 Static initializer for (static) mutex.
 
#define vlc_mutex_assert(m)   assert(vlc_mutex_held(m))
 Asserts that a mutex is locked by the calling thread.
 

Functions

void vlc_mutex_init (vlc_mutex_t *)
 Initializes a fast mutex.
 
void vlc_mutex_init_recursive (vlc_mutex_t *)
 Initializes a recursive mutex.
 
void vlc_mutex_lock (vlc_mutex_t *)
 Acquires a mutex.
 
int vlc_mutex_trylock (vlc_mutex_t *)
 Tries to acquire a mutex.
 
void vlc_mutex_unlock (vlc_mutex_t *)
 Releases a mutex.
 
bool vlc_mutex_held (const vlc_mutex_t *)
 Checks if a mutex is locked.
 

Detailed Description

Macro Definition Documentation

◆ vlc_mutex_assert

#define vlc_mutex_assert (   m)    assert(vlc_mutex_held(m))

Asserts that a mutex is locked by the calling thread.

◆ VLC_STATIC_MUTEX

#define VLC_STATIC_MUTEX
Value:
{ \
.value = 0, \
.recursion = 0, \
.owner = 0, \
}

Static initializer for (static) mutex.

Note
This only works in C code. In C++, consider using a global vlc::threads::mutex instance instead.

Function Documentation

◆ vlc_mutex_held()

bool vlc_mutex_held ( const vlc_mutex_t mtx)

Checks if a mutex is locked.

This function checks if the calling thread holds a given mutual exclusion lock. It has no side effects and is essentially intended for run-time debugging.

Note
To assert that the calling thread holds a lock, the helper macro vlc_mutex_assert() should be used instead of this function.
While it is nominally possible to implement recursive lock semantics with this function, vlc_mutex_init_recursive() should be used instead to create a recursive mutex explicitly..
Return values
falsethe mutex is not locked by the calling thread
truethe mutex is locked by the calling thread

References vlc_mutex_t::owner, and vlc_thread_id().

Referenced by vlc_fifo_Held(), vlc_mutex_trylock(), vlc_mutex_unlock(), vlc_player_Delete(), and vlc_player_Lock().

◆ vlc_mutex_init()

◆ vlc_mutex_init_recursive()

void vlc_mutex_init_recursive ( vlc_mutex_t mtx)

Initializes a recursive mutex.

Warning
This is strongly discouraged. Please use normal mutexes.

References vlc_mutex_init_common().

Referenced by input_EsOutTimeshiftNew(), and vlc_player_InitLocks().

◆ vlc_mutex_lock()

void vlc_mutex_lock ( vlc_mutex_t mtx)

Acquires a mutex.

If needed, this waits for any other thread to release it.

Warning
Beware of deadlocks when locking multiple mutexes at the same time, or when using mutexes from callbacks.
Note
This function is not a cancellation point.

References vlc_mutex_t::owner, vlc_mutex_t::value, vlc_atomic_wait(), vlc_mutex_trylock(), vlc_restorecancel(), vlc_savecancel(), and vlc_thread_id().

Referenced by Add(), AddAlbumCache(), addons_manager_Delete(), addons_manager_Gather(), addons_manager_WriteCatalog(), aout_ChangeViewpoint(), aout_Destroy(), aout_DeviceSet(), aout_DevicesList(), aout_HotplugNotify(), aout_MuteSet(), aout_OutputDelete(), aout_OutputNew(), aout_VolumeSet(), ArtCachePath(), CancelAllTasks(), CheckArt(), CheckMeta(), config_Lock(), config_PutFloat(), config_PutInt(), config_PutPsz(), config_ResetAll(), config_SaveConfigFile(), Control(), ControlPop(), ControlPopEarly(), CreateCacheKey(), DecoderPlayCcLocked(), Del(), DestroyVout(), dialog_cancel_locked(), dialog_display_error_va(), dialog_display_login_va(), dialog_display_question_va(), dialog_id_post(), dialog_remove_locked(), dialog_update_progress(), dialog_wait(), dialog_wait_interrupted(), display_progress_va(), End(), EsOutAdd(), EsOutControl(), EsOutDel(), EsOutFillEsFmt(), EsOutMeta(), EsOutPrivControl(), EsOutProgramEpg(), EsOutSend(), FetcherAddTask(), FetcherRemoveTask(), FilterFlush(), FilterPictureInteractive(), finder_thread_interrupted(), FinderThread(), getHeldEntryByUUID(), httpd_HostCreate(), httpd_HostDelete(), httpd_StreamCallBack(), httpd_StreamHeader(), httpd_StreamSend(), httpd_StreamSetHTTPHeaders(), httpd_UrlCatch(), httpd_UrlCatchCall(), httpd_UrlDelete(), httpd_UrlNew(), httpdLoop(), InitProperties(), InitTitle(), input_ControlPush(), input_Create(), input_GetAttachment(), input_GetAttachments(), input_item_AddInfo(), input_item_AddOpaque(), input_item_AddOption(), input_item_AddSlave(), input_item_ApplyOptions(), input_item_ChangeEPGSource(), input_item_Copy(), input_item_CopyOptions(), input_item_DelInfo(), input_item_GetDuration(), input_item_GetInfo(), input_item_GetMeta(), input_item_GetMetaExtra(), input_item_GetMetaExtraNames(), input_item_GetName(), input_item_GetTitleFbName(), input_item_GetType(), input_item_GetURI(), input_item_IsArtFetched(), input_item_IsPreparsed(), input_item_MergeInfos(), input_item_MetaMatch(), input_item_ReplaceInfos(), input_item_SetArtFetched(), input_item_SetArtNotFound(), input_item_SetDuration(), input_item_SetEpg(), input_item_SetEpgEvent(), input_item_SetEpgOffline(), input_item_SetEpgTime(), input_item_SetMeta(), input_item_SetMetaExtra(), input_item_SetName(), input_item_SetPreparsed(), input_item_SetURI(), input_item_UpdateTracksInfo(), input_item_WriteMeta(), input_rate_Add(), input_resource_GetAout(), input_resource_HoldAout(), input_resource_HoldVout(), input_resource_HoldVouts(), input_resource_PutAout(), input_resource_PutSout(), input_resource_PutVout(), input_resource_PutVoutLocked(), input_resource_RequestSout(), input_resource_RequestVout(), input_resource_ResetAout(), input_resource_SetInput(), input_resource_StopFreeVout(), input_resource_TerminateSout(), input_stats_Compute(), input_Stop(), input_Stopped(), input_thread_Events(), InputSourceMeta(), InputUpdateMeta(), InstallEntry(), installer_thread_interrupted(), InstallerThread(), installOrRemoveAddon(), intf_Create(), intf_DestroyAll(), libvlc_GetMainPlaylist(), libvlc_InternalDialogClean(), libvlc_Quit(), libvlc_SetExitHandler(), LoadSlaves(), vlc::threads::mutex::lock(), Lookup(), MainLoopStatistics(), Manage(), MergeSources(), MixModeCallback(), module_EndBank(), module_InitBank(), MouseEvent(), vlc::threads::mutex_locker::mutex_locker(), picture_fifo_Flush(), picture_fifo_IsEmpty(), picture_fifo_Pop(), picture_fifo_Push(), picture_pool_Get(), picture_pool_ReleaseClone(), picture_pool_Wait(), player_on_state_changed(), PreparePicture(), PreparserAddTask(), PreparserRemoveTask(), PrivControl(), ReadAlbumCache(), RemoveCcDecoder(), RequestVoutRsc(), RunThread(), Send(), sout_AnnounceRegisterSDP(), sout_AnnounceUnRegister(), sout_StreamLock(), spu_Attach(), spu_ChangeChannelOrderMargin(), spu_ChangeFilters(), spu_ChangeSources(), spu_ClearChannel(), spu_Destroy(), spu_Detach(), spu_PrerenderCancel(), spu_PrerenderEnqueue(), spu_PrerenderPause(), spu_PrerenderSync(), spu_PrerenderThread(), spu_PrerenderWake(), spu_PutSubpicture(), spu_RegisterChannelInternal(), spu_Render(), spu_SetClockDelay(), spu_SetClockRate(), spu_SetHighlight(), spu_UnregisterChannel(), SpuRenderText(), StereoModeCallback(), stream_GetDelay(), stream_ResetTimings(), stream_Synchronize(), ThreadRun(), ThumbnailerRun(), TriggerCallback(), TriggerListCallback(), TsChangePause(), TsChangeRate(), TsHasCmd(), TsIsUnused(), TsPushCmd(), TsRun(), TsStop(), update_CheckReal(), UpdateDeinterlaceFilter(), var_Create(), var_GetAllNames(), vlc_aout_stream_ChangePause(), vlc_aout_stream_NotifyTiming(), vlc_aout_stream_Play(), vlc_audio_meter_AddPlugin(), vlc_audio_meter_Flush(), vlc_audio_meter_Process(), vlc_audio_meter_RemovePlugin(), vlc_audio_meter_Reset(), vlc_clock_Delete(), vlc_clock_Lock(), vlc_clock_main_Lock(), vlc_cond_broadcast(), vlc_cond_signal(), vlc_cond_wait_finish(), vlc_cond_wait_prepare(), vlc_demux_chained_ControlVa(), vlc_demux_chained_Thread(), vlc_dialog_id_get_context(), vlc_dialog_id_set_context(), vlc_dialog_is_cancelled(), vlc_dialog_provider_set_callbacks(), vlc_dialog_provider_set_error_callback(), vlc_dialog_provider_set_ext_callback(), vlc_dialog_release(), vlc_drand48(), vlc_executor_Cancel(), vlc_executor_Delete(), vlc_executor_Submit(), vlc_executor_WaitIdle(), vlc_ext_dialog_update(), vlc_gl_surface_CheckSize(), vlc_gl_surface_Create(), vlc_gl_surface_ResizeNotify(), vlc_global_mutex(), vlc_h2_client_output_thread(), vlc_h2_conn_release(), vlc_h2_output_dequeue(), vlc_h2_output_destroy(), vlc_h2_output_queue(), vlc_h2_output_thread(), vlc_h2_recv_thread(), vlc_h2_stream_close(), vlc_h2_stream_lock(), vlc_h2_stream_open(), vlc_h2_stream_wake_up(), vlc_http_cookies_fetch(), vlc_http_cookies_store(), vlc_input_decoder_CreateSubDec(), vlc_input_decoder_Delete(), vlc_input_decoder_SetVoutMouseEvent(), vlc_interrupt_finish(), vlc_interrupt_prepare(), vlc_interrupt_raise(), vlc_lrand48(), vlc_media_source_provider_GetMediaSource(), vlc_media_source_provider_Remove(), vlc_media_tree_Lock(), vlc_ml_event_register_callback(), vlc_ml_event_send(), vlc_ml_event_unregister_callback(), vlc_mrand48(), vlc_mwait_i11e(), vlc_player_AddMetadataListener(), vlc_player_AddSmpteTimer(), vlc_player_AddTimer(), vlc_player_aout_AddListener(), vlc_player_aout_RemoveListener(), vlc_player_Delete(), vlc_player_destructor_Thread(), vlc_player_GetTimerPoint(), vlc_player_Lock(), vlc_player_OnLoudnessEvent(), vlc_player_RemoveMetadataListener(), vlc_player_RemoveTimer(), vlc_player_RemoveTimerSource(), vlc_player_ResetTimer(), vlc_player_UpdateTimer(), vlc_player_UpdateTimerEvent(), vlc_player_UpdateTimerSeekState(), vlc_player_vout_AddListener(), vlc_player_vout_RemoveListener(), vlc_playlist_item_meta_New(), vlc_preparser_Cancel(), vlc_preparser_Push(), vlc_queue_Lock(), vlc_rand_bytes(), vlc_rcu_synchronize(), vlc_strfplayer(), vlc_thread_cleanup(), vlc_threadvar_create(), vlc_threadvar_delete(), vlc_timer_destroy(), vlc_timer_schedule(), vlc_timer_thread(), vlc_vaLogEarly(), vlc_window_Delete(), vlc_window_New(), vlc_window_ReportFullscreen(), vlc_window_ReportWindowed(), vlc_window_SetInhibition(), vlm_Control(), vlm_Delete(), vlm_ExecuteCommand(), vlm_New(), vout_ChangeCrop(), vout_ChangeDisplayAspectRatio(), vout_ChangeDisplayFitting(), vout_ChangeFullscreen(), vout_ChangePause(), vout_ChangeViewpoint(), vout_ChangeWindowed(), vout_ChangeWindowState(), vout_ChangeZoom(), vout_control_Hold(), vout_control_Release(), vout_control_ReleaseAndWake(), vout_control_Wait(), vout_control_Wake(), vout_ControlChangeFilters(), vout_ControlChangeInterlacing(), vout_DisableWindow(), vout_display_ResizeWindow(), vout_display_window_MouseEvent(), vout_display_window_ResizeNotify(), vout_display_window_SetMouseHandler(), vout_FilterMouse(), vout_GetDevice(), vout_OSDEpg(), vout_ReleaseDisplay(), vout_Request(), vout_snapshot_End(), vout_snapshot_Get(), vout_snapshot_Set(), vout_Start(), and VoutRenderWakeUpUrgent().

◆ vlc_mutex_trylock()

int vlc_mutex_trylock ( vlc_mutex_t mtx)

Tries to acquire a mutex.

This function acquires the mutex if and only if it is not currently held by another thread. This function never sleeps and can be used in delay-critical code paths.

Note
This function is not a cancellation point.
Warning
If this function fails, then the mutex is held... by another thread. The calling thread must deal with the error appropriately. That typically implies postponing the operations that would have required the mutex. If the thread cannot defer those operations, then it must use vlc_mutex_lock(). If in doubt, use vlc_mutex_lock() instead.
Returns
0 if the mutex could be acquired, an error code otherwise.

References vlc_mutex_t::owner, vlc_mutex_t::recursion, unlikely, vlc_mutex_t::value, vlc_mutex_held(), and vlc_thread_id().

Referenced by vlc_mutex_lock(), and vout_snapshot_IsRequested().

◆ vlc_mutex_unlock()

void vlc_mutex_unlock ( vlc_mutex_t mtx)

Releases a mutex.

If the mutex is not held by the calling thread, the behaviour is undefined.

Note
This function is not a cancellation point.

References vlc_mutex_t::owner, vlc_mutex_t::recursion, unlikely, vlc_mutex_t::value, vlc_assert_unreachable, vlc_atomic_notify_one(), and vlc_mutex_held().

Referenced by Add(), AddAlbumCache(), AddCallback(), addons_manager_Delete(), addons_manager_Gather(), addons_manager_WriteCatalog(), aout_ChangeViewpoint(), aout_Destroy(), aout_DeviceSet(), aout_DevicesList(), aout_HotplugNotify(), aout_MuteSet(), aout_OutputDelete(), aout_OutputNew(), aout_VolumeSet(), ArtCachePath(), CancelAllTasks(), CheckArt(), CheckMeta(), config_PutFloat(), config_PutInt(), config_PutPsz(), config_ResetAll(), config_SaveConfigFile(), config_Unlock(), Control(), ControlPop(), ControlPopEarly(), CreateCacheKey(), DecoderPlayCcLocked(), Del(), DelCallback(), DestroyVout(), dialog_cancel_locked(), dialog_display_error_va(), dialog_display_login_va(), dialog_display_question_va(), dialog_id_post(), dialog_remove_locked(), dialog_update_progress(), dialog_wait(), dialog_wait_interrupted(), display_progress_va(), End(), EsOutAdd(), EsOutControl(), EsOutDel(), EsOutFillEsFmt(), EsOutMeta(), EsOutPrivControl(), EsOutProgramEpg(), EsOutSend(), FetcherAddTask(), FetcherRemoveTask(), FilterFlush(), FilterPictureInteractive(), finder_thread_interrupted(), FinderThread(), getHeldEntryByUUID(), httpd_HostCreate(), httpd_HostDelete(), httpd_StreamCallBack(), httpd_StreamHeader(), httpd_StreamSend(), httpd_StreamSetHTTPHeaders(), httpd_UrlCatch(), httpd_UrlCatchCall(), httpd_UrlDelete(), httpd_UrlNew(), httpdLoop(), InitProperties(), InitTitle(), input_ControlPush(), input_Create(), input_GetAttachment(), input_GetAttachments(), input_item_AddInfo(), input_item_AddOpaque(), input_item_AddOption(), input_item_AddSlave(), input_item_ApplyOptions(), input_item_ChangeEPGSource(), input_item_Copy(), input_item_CopyOptions(), input_item_DelInfo(), input_item_GetDuration(), input_item_GetInfo(), input_item_GetMeta(), input_item_GetMetaExtra(), input_item_GetMetaExtraNames(), input_item_GetName(), input_item_GetTitleFbName(), input_item_GetType(), input_item_GetURI(), input_item_IsArtFetched(), input_item_IsPreparsed(), input_item_MergeInfos(), input_item_MetaMatch(), input_item_ReplaceInfos(), input_item_SetArtFetched(), input_item_SetArtNotFound(), input_item_SetDuration(), input_item_SetEpg(), input_item_SetEpgEvent(), input_item_SetEpgOffline(), input_item_SetEpgTime(), input_item_SetMeta(), input_item_SetMetaExtra(), input_item_SetName(), input_item_SetPreparsed(), input_item_SetURI(), input_item_UpdateTracksInfo(), input_item_WriteMeta(), input_rate_Add(), input_resource_GetAout(), input_resource_HoldAout(), input_resource_HoldVout(), input_resource_HoldVouts(), input_resource_PutAout(), input_resource_PutSout(), input_resource_PutVout(), input_resource_PutVoutLocked(), input_resource_RequestSout(), input_resource_RequestVout(), input_resource_ResetAout(), input_resource_SetInput(), input_resource_StopFreeVout(), input_resource_TerminateSout(), input_stats_Compute(), input_Stop(), input_Stopped(), input_thread_Events(), InputSourceMeta(), InputUpdateMeta(), InstallEntry(), installer_thread_interrupted(), InstallerThread(), installOrRemoveAddon(), intf_Create(), intf_DestroyAll(), libvlc_GetMainPlaylist(), libvlc_InternalDialogClean(), libvlc_Quit(), libvlc_SetExitHandler(), LoadSlaves(), MainLoopStatistics(), Manage(), MergeSources(), MixModeCallback(), module_EndBank(), module_LoadPlugins(), MouseEvent(), picture_fifo_Flush(), picture_fifo_IsEmpty(), picture_fifo_Pop(), picture_fifo_Push(), picture_pool_Get(), picture_pool_ReleaseClone(), picture_pool_Wait(), player_on_state_changed(), PreparePicture(), PreparserAddTask(), PreparserRemoveTask(), PrivControl(), ReadAlbumCache(), RemoveCcDecoder(), RequestVoutRsc(), RunThread(), Send(), sout_AnnounceRegisterSDP(), sout_AnnounceUnRegister(), sout_StreamUnlock(), spu_Attach(), spu_ChangeChannelOrderMargin(), spu_ChangeFilters(), spu_ChangeSources(), spu_ClearChannel(), spu_Destroy(), spu_Detach(), spu_PrerenderCancel(), spu_PrerenderEnqueue(), spu_PrerenderPause(), spu_PrerenderSync(), spu_PrerenderThread(), spu_PrerenderWake(), spu_PutSubpicture(), spu_RegisterChannelInternal(), spu_Render(), spu_SetClockDelay(), spu_SetClockRate(), spu_SetHighlight(), spu_UnregisterChannel(), SpuRenderText(), StereoModeCallback(), stream_GetDelay(), stream_ResetTimings(), stream_Synchronize(), ThreadRun(), ThumbnailerRun(), TriggerCallback(), TriggerListCallback(), TsChangePause(), TsChangeRate(), TsHasCmd(), TsIsUnused(), TsPushCmd(), TsRun(), TsStop(), vlc::threads::mutex::unlock(), update_CheckReal(), UpdateDeinterlaceFilter(), var_Change(), var_Create(), var_Destroy(), var_GetAllNames(), var_GetAndSet(), var_GetChecked(), var_SetChecked(), var_TriggerCallback(), var_Type(), vlc_aout_stream_ChangePause(), vlc_aout_stream_NotifyTiming(), vlc_aout_stream_Play(), vlc_audio_meter_AddPlugin(), vlc_audio_meter_Flush(), vlc_audio_meter_Process(), vlc_audio_meter_RemovePlugin(), vlc_audio_meter_Reset(), vlc_clock_Delete(), vlc_clock_main_Unlock(), vlc_clock_Unlock(), vlc_cond_broadcast(), vlc_cond_signal(), vlc_cond_wait_finish(), vlc_cond_wait_prepare(), vlc_demux_chained_ControlVa(), vlc_demux_chained_Thread(), vlc_dialog_id_get_context(), vlc_dialog_id_set_context(), vlc_dialog_is_cancelled(), vlc_dialog_provider_set_callbacks(), vlc_dialog_provider_set_error_callback(), vlc_dialog_provider_set_ext_callback(), vlc_dialog_release(), vlc_drand48(), vlc_executor_Cancel(), vlc_executor_Delete(), vlc_executor_Submit(), vlc_executor_WaitIdle(), vlc_ext_dialog_update(), vlc_gl_surface_CheckSize(), vlc_gl_surface_Create(), vlc_gl_surface_ResizeNotify(), vlc_global_mutex(), vlc_h2_client_output_thread(), vlc_h2_conn_release(), vlc_h2_output_dequeue(), vlc_h2_output_destroy(), vlc_h2_output_queue(), vlc_h2_output_thread(), vlc_h2_recv_thread(), vlc_h2_stream_close(), vlc_h2_stream_open(), vlc_h2_stream_unlock(), vlc_h2_stream_wake_up(), vlc_http_cookies_fetch(), vlc_http_cookies_store(), vlc_input_decoder_CreateSubDec(), vlc_input_decoder_Delete(), vlc_input_decoder_SetVoutMouseEvent(), vlc_interrupt_finish(), vlc_interrupt_prepare(), vlc_interrupt_raise(), vlc_lrand48(), vlc_media_source_provider_GetMediaSource(), vlc_media_source_provider_Remove(), vlc_media_tree_Unlock(), vlc_ml_event_register_callback(), vlc_ml_event_send(), vlc_ml_event_unregister_callback(), vlc_mrand48(), vlc_mwait_i11e(), vlc_mwait_i11e_cleanup(), vlc_player_AddMetadataListener(), vlc_player_AddSmpteTimer(), vlc_player_AddTimer(), vlc_player_aout_AddListener(), vlc_player_aout_RemoveListener(), vlc_player_Delete(), vlc_player_destructor_Thread(), vlc_player_GetTimerPoint(), vlc_player_OnLoudnessEvent(), vlc_player_RemoveMetadataListener(), vlc_player_RemoveTimer(), vlc_player_RemoveTimerSource(), vlc_player_ResetTimer(), vlc_player_Unlock(), vlc_player_UpdateTimer(), vlc_player_UpdateTimerEvent(), vlc_player_UpdateTimerSeekState(), vlc_player_vout_AddListener(), vlc_player_vout_RemoveListener(), vlc_playlist_item_meta_New(), vlc_preparser_Cancel(), vlc_preparser_Push(), vlc_queue_Unlock(), vlc_rand_bytes(), vlc_rcu_synchronize(), vlc_strfplayer(), vlc_thread_cleanup(), vlc_threadvar_create(), vlc_threadvar_delete(), vlc_timer_destroy(), vlc_timer_schedule(), vlc_timer_thread(), vlc_vaLogEarly(), vlc_window_Delete(), vlc_window_New(), vlc_window_ReportFullscreen(), vlc_window_ReportWindowed(), vlc_window_SetInhibition(), vlm_Control(), vlm_Delete(), vlm_ExecuteCommand(), vlm_New(), vout_ChangeCrop(), vout_ChangeDisplayAspectRatio(), vout_ChangeDisplayFitting(), vout_ChangeFullscreen(), vout_ChangePause(), vout_ChangeViewpoint(), vout_ChangeWindowed(), vout_ChangeWindowState(), vout_ChangeZoom(), vout_control_Hold(), vout_control_Release(), vout_control_ReleaseAndWake(), vout_control_Wait(), vout_control_Wake(), vout_ControlChangeFilters(), vout_ControlChangeInterlacing(), vout_DisableWindow(), vout_display_ResizeWindow(), vout_display_window_MouseEvent(), vout_display_window_ResizeNotify(), vout_display_window_SetMouseHandler(), vout_FilterMouse(), vout_GetDevice(), vout_OSDEpg(), vout_ReleaseDisplay(), vout_Request(), vout_snapshot_End(), vout_snapshot_Get(), vout_snapshot_IsRequested(), vout_snapshot_Set(), vout_Start(), VoutRenderWakeUpUrgent(), and vlc::threads::mutex_locker::~mutex_locker().