vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Nov 27 20:02:30 2012 +0200| [70f43de333194bb85e82833c2a007adf3145cb67] | committer: Rémi Denis-Courmont
motion: do not use pf_run > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=70f43de333194bb85e82833c2a007adf3145cb67 --- modules/control/motion.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/modules/control/motion.c b/modules/control/motion.c index 2291f52..6e5b7fb 100644 --- a/modules/control/motion.c +++ b/modules/control/motion.c @@ -30,6 +30,7 @@ # include "config.h" #endif +#include <assert.h> #include <unistd.h> #include <vlc_common.h> @@ -46,6 +47,7 @@ struct intf_sys_t { motion_sensors_t *p_motion; + vlc_thread_t thread; }; /***************************************************************************** @@ -54,7 +56,7 @@ struct intf_sys_t static int Open ( vlc_object_t * ); static void Close ( vlc_object_t * ); -static void RunIntf( intf_thread_t *p_intf ); +static void *RunIntf( void * ); /***************************************************************************** * Module descriptor @@ -79,21 +81,26 @@ vlc_module_end () int Open ( vlc_object_t *p_this ) { intf_thread_t *p_intf = (intf_thread_t *)p_this; - - p_intf->p_sys = malloc( sizeof( intf_sys_t ) ); - if( p_intf->p_sys == NULL ) - { + intf_sys_t *p_sys = malloc( sizeof( *p_sys ) ); + if( unlikely(p_sys == NULL) ) return VLC_ENOMEM; - } - p_intf->p_sys->p_motion = motion_create( VLC_OBJECT( p_intf ) ); - if( p_intf->p_sys->p_motion == NULL ) + p_sys->p_motion = motion_create( VLC_OBJECT( p_intf ) ); + if( p_sys->p_motion == NULL ) { - free( p_intf->p_sys ); +error: + free( p_sys ); return VLC_EGENERIC; } - p_intf->pf_run = RunIntf; + p_intf->pf_run = NULL; + p_intf->p_sys = p_sys; + + if( vlc_clone( &p_sys->thread, RunIntf, p_intf, VLC_THREAD_PRIORITY_LOW ) ) + { + motion_destroy( p_sys->p_motion ); + goto error; + } return VLC_SUCCESS; } @@ -104,9 +111,12 @@ int Open ( vlc_object_t *p_this ) void Close ( vlc_object_t *p_this ) { intf_thread_t *p_intf = (intf_thread_t *)p_this; + intf_sys_t *p_sys = p_intf->p_sys; - motion_destroy( p_intf->p_sys->p_motion ); - free( p_intf->p_sys ); + vlc_cancel( p_sys->thread ); + vlc_join( p_sys->thread, NULL ); + motion_destroy( p_sys->p_motion ); + free( p_sys ); } /***************************************************************************** @@ -114,8 +124,9 @@ void Close ( vlc_object_t *p_this ) *****************************************************************************/ #define LOW_THRESHOLD 800 #define HIGH_THRESHOLD 1000 -static void RunIntf( intf_thread_t *p_intf ) +static void *RunIntf( void *data ) { + intf_thread_t *p_intf = data; int i_oldx = 0; for( ;; ) @@ -179,7 +190,7 @@ static void RunIntf( intf_thread_t *p_intf ) vlc_restorecancel( canc ); } + assert(0); } #undef LOW_THRESHOLD #undef HIGH_THRESHOLD - _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
