[vlc-commits] Converted remoteosd to vlc_clone().
Laurent Aimar
git at videolan.org
Tue May 17 23:13:49 CEST 2011
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Tue May 17 23:13:11 2011 +0200| [55c5936147fa356b3ea0e171b8d19150c30832d9] | committer: Laurent Aimar
Converted remoteosd to vlc_clone().
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=55c5936147fa356b3ea0e171b8d19150c30832d9
---
modules/video_filter/remoteosd.c | 82 ++++++++++++++++++++------------------
1 files changed, 43 insertions(+), 39 deletions(-)
diff --git a/modules/video_filter/remoteosd.c b/modules/video_filter/remoteosd.c
index 40f401f..81b8743 100644
--- a/modules/video_filter/remoteosd.c
+++ b/modules/video_filter/remoteosd.c
@@ -162,9 +162,9 @@ static int KeyEvent( vlc_object_t *p_this, char const *psz_var,
static void stop_osdvnc ( filter_t *p_filter );
-static void* vnc_worker_thread ( vlc_object_t *p_thread_obj );
+static void* vnc_worker_thread ( void * );
-static void* update_request_thread( vlc_object_t *p_thread_obj );
+static void* update_request_thread( void * );
static bool open_vnc_connection ( filter_t *p_filter );
@@ -234,7 +234,7 @@ struct filter_sys_t
bool b_continue;
- vlc_object_t* p_worker_thread;
+ vlc_thread_t worker_thread;
uint8_t ar_color_table_yuv[256][4];
};
@@ -315,13 +315,9 @@ static int CreateFilter ( vlc_object_t *p_this )
vlc_gcrypt_init();
/* create the vnc worker thread */
- p_sys->p_worker_thread = vlc_object_create( p_this,
- sizeof( vlc_object_t ) );
- vlc_object_attach( p_sys->p_worker_thread, p_this );
- if( vlc_thread_create( p_sys->p_worker_thread,
- vnc_worker_thread, VLC_THREAD_PRIORITY_LOW ) )
+ if( vlc_clone( &p_sys->worker_thread,
+ vnc_worker_thread, p_filter, VLC_THREAD_PRIORITY_LOW ) )
{
- vlc_object_release( p_sys->p_worker_thread );
msg_Err( p_filter, "cannot spawn vnc message reader thread" );
goto error;
}
@@ -380,14 +376,10 @@ static void stop_osdvnc ( filter_t *p_filter )
vlc_object_kill( p_filter );
/* */
- if( p_sys->p_worker_thread )
- {
- msg_Dbg( p_filter, "joining worker_thread" );
- vlc_object_kill( p_sys->p_worker_thread );
- vlc_thread_join( p_sys->p_worker_thread );
- vlc_object_release( p_sys->p_worker_thread );
- msg_Dbg( p_filter, "released worker_thread" );
- }
+ msg_Dbg( p_filter, "joining worker_thread" );
+ vlc_cancel( p_sys->worker_thread );
+ vlc_join( p_sys->worker_thread, NULL );
+ msg_Dbg( p_filter, "released worker_thread" );
msg_Dbg( p_filter, "osdvnc stopped" );
}
@@ -645,11 +637,11 @@ static bool handshaking ( filter_t *p_filter )
}
-static void* vnc_worker_thread( vlc_object_t *p_thread_obj )
+static void* vnc_worker_thread( void *obj )
{
- filter_t* p_filter = (filter_t*)(p_thread_obj->p_parent);
+ filter_t* p_filter = (filter_t*)obj;
filter_sys_t *p_sys = p_filter->p_sys;
- vlc_object_t *p_update_request_thread;
+ vlc_thread_t update_request_thread_handle;
int canc = vlc_savecancel ();
msg_Dbg( p_filter, "VNC worker thread started" );
@@ -683,19 +675,17 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj )
vlc_mutex_unlock( &p_sys->lock );
/* create the update request thread */
- p_update_request_thread = vlc_object_create( p_filter,
- sizeof( vlc_object_t ) );
- vlc_object_attach( p_update_request_thread, p_filter );
- if( vlc_thread_create( p_update_request_thread,
- update_request_thread, VLC_THREAD_PRIORITY_LOW ) )
+ if( vlc_clone( &update_request_thread_handle,
+ update_request_thread, p_filter,
+ VLC_THREAD_PRIORITY_LOW ) )
{
- vlc_object_release( p_update_request_thread );
msg_Err( p_filter, "cannot spawn vnc update request thread" );
goto exit;
}
/* connection is initialized, now read and handle server messages */
- while( vlc_object_alive( p_thread_obj ) )
+ vlc_restorecancel (canc);
+ for( ;; )
{
rfbServerToClientMsg msg;
int i_msgSize;
@@ -743,13 +733,16 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj )
break;
}
}
+
+ canc = vlc_savecancel ();
process_server_message( p_filter, &msg);
+ vlc_restorecancel (canc);
}
+ canc = vlc_savecancel ();
msg_Dbg( p_filter, "joining update_request_thread" );
- vlc_object_kill( p_update_request_thread );
- vlc_thread_join( p_update_request_thread );
- vlc_object_release( p_update_request_thread );
+ vlc_cancel( update_request_thread_handle );
+ vlc_join( update_request_thread_handle, NULL );
msg_Dbg( p_filter, "released update_request_thread" );
exit:
@@ -773,11 +766,17 @@ exit:
return NULL;
}
-static void* update_request_thread( vlc_object_t *p_thread_obj )
+static void update_request_thread_cleanup( void *obj )
{
- filter_t* p_filter = (filter_t*)(p_thread_obj->p_parent);
+ filter_t* p_filter = (filter_t*)obj;
+
+ p_filter->p_sys->b_continue = false;
+}
+
+static void* update_request_thread( void *obj )
+{
+ filter_t* p_filter = (filter_t*)obj;
filter_sys_t *p_sys = p_filter->p_sys;
- int canc = vlc_savecancel ();
msg_Dbg( p_filter, "VNC update request thread started" );
@@ -789,11 +788,16 @@ static void* update_request_thread( vlc_object_t *p_thread_obj )
udr.w = htons(p_sys->i_vnc_width);
udr.h = htons(p_sys->i_vnc_height);
- if( !write_exact(p_filter, p_sys->i_socket, (char*)&udr,
- sz_rfbFramebufferUpdateRequestMsg) )
+ int w;
+ vlc_cleanup_push( update_request_thread_cleanup, p_filter );
+ w = write_exact(p_filter, p_sys->i_socket, (char*)&udr,
+ sz_rfbFramebufferUpdateRequestMsg);
+ vlc_cleanup_pop();
+
+ if( !w )
{
msg_Err( p_filter, "Could not write rfbFramebufferUpdateRequestMsg." );
- p_sys->b_continue = false;
+ update_request_thread_cleanup( p_filter );
return NULL;
}
@@ -802,7 +806,8 @@ static void* update_request_thread( vlc_object_t *p_thread_obj )
if( p_sys->b_vnc_poll)
{
- while( vlc_object_alive( p_thread_obj ) )
+ vlc_cleanup_push( update_request_thread_cleanup, p_filter );
+ for( ;; )
{
msleep( i_poll_interval_microsec );
if( !write_exact(p_filter, p_sys->i_socket, (char*)&udr,
@@ -812,7 +817,7 @@ static void* update_request_thread( vlc_object_t *p_thread_obj )
break;
}
}
- p_sys->b_continue = false;
+ vlc_cleanup_run();
}
else
{
@@ -820,7 +825,6 @@ static void* update_request_thread( vlc_object_t *p_thread_obj )
}
msg_Dbg( p_filter, "VNC update request thread ended" );
- vlc_restorecancel (canc);
return NULL;
}
More information about the vlc-commits
mailing list