From 0b4e5d22926f6cc90ffe032a19bd6fe9fedef3f6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Fri, 21 Aug 2009 21:58:28 +0300 Subject: [PATCH] CPU: fprintf is not safe inside a signal handler... ...and VLC does not quite work on Linux 2.2 anymore. --- src/misc/cpu.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/misc/cpu.c b/src/misc/cpu.c index afa0cdbd1a..b5d0e47725 100644 --- a/src/misc/cpu.c +++ b/src/misc/cpu.c @@ -51,8 +51,15 @@ static void SigHandler ( int ); *****************************************************************************/ static jmp_buf env; static int i_illegal; + #if defined( __i386__ ) || defined( __x86_64__ ) -static const char *psz_capability; +static void warn_cap( const char *psz_capability ) +{ + fprintf( stderr, "warning: your CPU has %s instructions, but not your " + "operating system.\n", psz_capability ); + fprintf( stderr, " some optimizations will be disabled unless " + "you upgrade your OS\n" ); +} #endif /***************************************************************************** @@ -152,7 +159,6 @@ uint32_t CPUCapabilities( void ) # ifdef CAN_COMPILE_SSE /* We test if OS supports the SSE instructions */ - psz_capability = "SSE"; i_illegal = 0; if( setjmp( env ) == 0 ) @@ -162,9 +168,9 @@ uint32_t CPUCapabilities( void ) } if( i_illegal == 0 ) - { i_capabilities |= CPU_CAPABILITY_SSE; - } + else + warn_cap( "SSE" ); # endif } @@ -172,7 +178,6 @@ uint32_t CPUCapabilities( void ) { # if defined(CAN_COMPILE_SSE) /* We test if OS supports the SSE instructions */ - psz_capability = "SSE2"; i_illegal = 0; if( setjmp( env ) == 0 ) @@ -182,9 +187,9 @@ uint32_t CPUCapabilities( void ) } if( i_illegal == 0 ) - { i_capabilities |= CPU_CAPABILITY_SSE2; - } + else + warn_cap( "SSE2" ); # endif } @@ -200,7 +205,6 @@ uint32_t CPUCapabilities( void ) # ifdef CAN_COMPILE_3DNOW if( i_edx & 0x80000000 ) { - psz_capability = "3D Now!"; i_illegal = 0; if( setjmp( env ) == 0 ) @@ -210,9 +214,9 @@ uint32_t CPUCapabilities( void ) } if( i_illegal == 0 ) - { i_capabilities |= CPU_CAPABILITY_3DNOW; - } + else + warn_cap( "3D Now!" ); } # endif @@ -291,17 +295,6 @@ static void SigHandler( int i_signal ) #else VLC_UNUSED( i_signal ); #endif - -#if defined( __i386__ ) - fprintf( stderr, "warning: your CPU has %s instructions, but not your " - "operating system.\n", psz_capability ); - fprintf( stderr, " some optimizations will be disabled unless " - "you upgrade your OS\n" ); -# if defined( __linux__ ) - fprintf( stderr, " (for instance Linux kernel 2.4.x or later)\n" ); -# endif -#endif - longjmp( env, 1 ); } -- 2.39.2