From f7db1e80a30c83036c2dfb11f54e37c4103b162d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= Date: Wed, 17 Aug 2011 18:42:04 +0300 Subject: [PATCH] Introduce VLC_NORETURN function attribute and use it Note that this attribute implies that the function never returns in any circumstances (it exits, it aborts or it gets cancelled). Do not use this attribute for function that do not return at the end but may return from other branches. --- include/vlc_common.h | 2 ++ modules/access/mms/mmstu.c | 1 + modules/demux/live555.cpp | 1 + modules/misc/inhibit/xdg.c | 1 + modules/services_discovery/podcast.c | 1 + src/posix/thread.c | 1 + src/stream_output/sap.c | 1 + src/video_output/display.c | 4 +--- 8 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/vlc_common.h b/include/vlc_common.h index 0c7966faa0..337fd8a0b7 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -92,6 +92,7 @@ # define VLC_FORMAT_ARG(x) __attribute__ ((format_arg(x))) # define VLC_MALLOC __attribute__ ((malloc)) +# define VLC_NORETURN __attribute__ ((noreturn)) # if VLC_GCC_VERSION(3,4) # define VLC_USED __attribute__ ((warn_unused_result)) @@ -104,6 +105,7 @@ # define VLC_FORMAT(x,y) # define VLC_FORMAT_ARG(x) # define VLC_MALLOC +# define VLC_NORETURN # define VLC_USED #endif diff --git a/modules/access/mms/mmstu.c b/modules/access/mms/mmstu.c index 4ea1cca335..b4b8bdbaa3 100644 --- a/modules/access/mms/mmstu.c +++ b/modules/access/mms/mmstu.c @@ -1554,6 +1554,7 @@ static int mms_HeaderMediaRead( access_t *p_access, int i_type ) return -1; } +VLC_NORETURN static void *KeepAliveThread( void *p_data ) { access_t *p_access = p_data; diff --git a/modules/demux/live555.cpp b/modules/demux/live555.cpp index ed08dbeaa6..abbc0caa91 100644 --- a/modules/demux/live555.cpp +++ b/modules/demux/live555.cpp @@ -1963,6 +1963,7 @@ static void TaskInterruptData( void *p_private ) /***************************************************************************** * *****************************************************************************/ +VLC_NORETURN static void* TimeoutPrevention( void *p_data ) { timeout_thread_t *p_timeout = (timeout_thread_t *)p_data; diff --git a/modules/misc/inhibit/xdg.c b/modules/misc/inhibit/xdg.c index 20a24ff1ea..ac69a3dbff 100644 --- a/modules/misc/inhibit/xdg.c +++ b/modules/misc/inhibit/xdg.c @@ -112,6 +112,7 @@ static void Inhibit (vlc_inhibit_t *ih, bool suspend) extern char **environ; +VLC_NORETURN static void *Thread (void *data) { vlc_inhibit_t *ih = data; diff --git a/modules/services_discovery/podcast.c b/modules/services_discovery/podcast.c index 5c936cfca8..2ad6356170 100644 --- a/modules/services_discovery/podcast.c +++ b/modules/services_discovery/podcast.c @@ -200,6 +200,7 @@ static void Close( vlc_object_t *p_this ) /***************************************************************************** * Run: main thread *****************************************************************************/ +VLC_NORETURN static void *Run( void *data ) { services_discovery_t *p_sd = data; diff --git a/src/posix/thread.c b/src/posix/thread.c index 966c74cc5f..90645635fd 100644 --- a/src/posix/thread.c +++ b/src/posix/thread.c @@ -1018,6 +1018,7 @@ struct vlc_timer vlc_atomic_t overruns; }; +VLC_NORETURN static void *vlc_timer_thread (void *data) { struct vlc_timer *timer = data; diff --git a/src/stream_output/sap.c b/src/stream_output/sap.c index 4a3b7c258c..181a423aa5 100644 --- a/src/stream_output/sap.c +++ b/src/stream_output/sap.c @@ -170,6 +170,7 @@ static void AddressDestroy (sap_address_t *addr) * \param p_this the SAP Handler object * \return nothing */ +VLC_NORETURN static void *RunThread (void *self) { sap_address_t *addr = self; diff --git a/src/video_output/display.c b/src/video_output/display.c index a25c3bef72..c743836a01 100644 --- a/src/video_output/display.c +++ b/src/video_output/display.c @@ -538,9 +538,7 @@ static void VoutDisplayEventMouse(vout_display_t *vd, int event, va_list args) vlc_mutex_unlock(&osys->lock); } -#ifdef __GNUC__ -static void *VoutDisplayEventKeyDispatch(void *data) __attribute__((noreturn)); -#endif +VLC_NORETURN static void *VoutDisplayEventKeyDispatch(void *data) { vout_display_owner_sys_t *osys = data;