# HG changeset patch # User rosfran # Date 1166570912 0 # Node ID 00b55a87f1ba0a09bd5fdad3c631a86fa1a964d0 # Parent 94387b7ed9464084601da784443f28875ca823de [svn r233] Improved GObject' signals emition, following some tips from Kapeta. diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_file_transfer.c --- a/gmyth/src/gmyth_file_transfer.c Tue Dec 19 21:29:51 2006 +0000 +++ b/gmyth/src/gmyth_file_transfer.c Tue Dec 19 23:28:32 2006 +0000 @@ -103,7 +103,7 @@ static void gmyth_file_transfer_finalize (GObject *object); static void gmyth_file_transfer_program_info_changed( GMythFileTransfer *transfer, - gint msg_code, gpointer livetv_transfer, gpointer user_data ); + gint msg_code, gpointer livetv_transfer ); static gboolean gmyth_connect_to_backend (GMythFileTransfer *transfer); @@ -631,9 +631,9 @@ static void gmyth_file_transfer_program_info_changed( GMythFileTransfer *transfer, - gint msg_code, gpointer livetv_transfer, gpointer user_data ) + gint msg_code, gpointer livetv_transfer ) { - GMythLiveTV *livetv = (GMythLiveTV*)user_data; + GMythLiveTV *livetv = (GMythLiveTV*)livetv_transfer; gmyth_debug( "Program info changed! ( file transfer orig. = %p, ptr. = [%s], user data = [%s] )", transfer, livetv_transfer != NULL ? "[NOT NULL]" : "[NULL]", livetv != NULL ? "[NOT NULL]" : "[NULL]" ); diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_file_transfer.h --- a/gmyth/src/gmyth_file_transfer.h Tue Dec 19 21:29:51 2006 +0000 +++ b/gmyth/src/gmyth_file_transfer.h Tue Dec 19 23:28:32 2006 +0000 @@ -69,7 +69,7 @@ /* signal default handlers */ void (*program_info_changed_handler) ( GMythFileTransfer *transfer, - gint msg_code, gpointer livetv_transfer, gpointer user_data ); + gint msg_code, gpointer livetv_transfer ); }; struct _GMythFileTransfer diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_livetv.c --- a/gmyth/src/gmyth_livetv.c Tue Dec 19 21:29:51 2006 +0000 +++ b/gmyth/src/gmyth_livetv.c Tue Dec 19 23:28:32 2006 +0000 @@ -138,15 +138,19 @@ static void gmyth_livetv_monitor_signal_handler( GMythMonitorHandler *monitor, gint msg_code, - gchar* message, gpointer livetv, gpointer user_data ) + gchar* message, gpointer user_data ) { GMythLiveTV *live_tv = (GMythLiveTV*) user_data; + g_object_ref( live_tv ); - gmyth_debug( "LIVETV Signal handler ( msg = %s, code = %d, livetv param = %s, user_data = %s )\n", message, msg_code, livetv != NULL ? "" : + gmyth_debug( "LIVETV Signal handler ( msg = %s, code = %d, live_tv param = %s, user_data = %s )\n", message, msg_code, live_tv != NULL ? "" : "NULL", user_data != NULL ? "" : "NULL" ); - if ( NULL == live_tv && user_data == NULL ) - return; + if ( NULL == live_tv ) + { + gmyth_debug( "LiveTV_obj is equals to NULL!!!" ); + return; + } switch ( msg_code ) { @@ -159,10 +163,10 @@ /* advertises the FileTransfer about the program info changed */ if ( live_tv->file_transfer != NULL ) { - g_signal_emit ( live_tv->file_transfer, - GMYTH_FILE_TRANSFER_GET_CLASS (live_tv->file_transfer)->program_info_changed_handler_signal_id, + g_signal_emit_by_name ( G_OBJECT(live_tv->file_transfer), + "program-info-changed", 0, /* details */ - msg_code, live_tv, live_tv ); + msg_code, live_tv ); gmyth_livetv_monitor_handler_stop( live_tv ); } else @@ -328,6 +332,7 @@ if ( !gmyth_livetv_monitor_handler_start( livetv ) ) { res = FALSE; + gmyth_debug("LiveTV MONITOR handler error on setup!"); goto error; } diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_marshal.list --- a/gmyth/src/gmyth_marshal.list Tue Dec 19 21:29:51 2006 +0000 +++ b/gmyth/src/gmyth_marshal.list Tue Dec 19 23:28:32 2006 +0000 @@ -1,2 +1,2 @@ -VOID:INT,STRING,POINTER +VOID:INT,STRING VOID:INT,POINTER diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_monitor_handler.c --- a/gmyth/src/gmyth_monitor_handler.c Tue Dec 19 21:29:51 2006 +0000 +++ b/gmyth/src/gmyth_monitor_handler.c Tue Dec 19 23:28:32 2006 +0000 @@ -78,10 +78,11 @@ //static gboolean gmyth_monitor_handler_listener( GIOChannel *io_channel, // GIOCondition condition, gpointer data ); -gboolean* gmyth_monitor_handler_listener( GMythMonitorHandler *monitor ); +//gboolean* gmyth_monitor_handler_listener( GMythMonitorHandler *monitor ); -static void gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message, - gpointer live_tv, gpointer user_data ); +void gmyth_monitor_handler_listener( GMythMonitorHandler *monitor, gpointer user_data ); + +static void gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message ); static GMutex* mutex = NULL; @@ -118,12 +119,11 @@ 0, NULL, NULL, - gmyth_marshal_VOID__INT_STRING_POINTER, + gmyth_marshal_VOID__INT_STRING, G_TYPE_NONE, - 3, + 2, G_TYPE_INT, - G_TYPE_STRING, - G_TYPE_POINTER); + G_TYPE_STRING); gmonitor_class->backend_events_handler = gmyth_monitor_handler_default_listener; @@ -160,10 +160,12 @@ if ( monitor->monitor_th != NULL ) { - //g_thread_exit( monitor->monitor_th, TRUE, FALSE ); + g_thread_pool_free( monitor->monitor_th, TRUE, FALSE ); + /* g_thread_exit( monitor->monitor_th ); if ( monitor->monitor_th != NULL ) g_object_unref( monitor->monitor_th ); + */ monitor->monitor_th = NULL; } @@ -179,7 +181,7 @@ monitor->hostname = NULL; } - if ( monitor->backend_msgs != NULL ) + if ( monitor->backend_msgs != NULL ) { g_hash_table_destroy ( monitor->backend_msgs ); monitor->backend_msgs = NULL; @@ -321,7 +323,8 @@ if ( g_strstr_len( *back_msg_action, strlen( *back_msg_action ), "LIVETV_CHAIN" ) || g_strstr_len( *back_msg_action, strlen( *back_msg_action ), "RECORDING_LIST_CHANGE" ) || g_strstr_len( *back_msg_action, strlen( *back_msg_action ), "LIVETV_WATCH" ) ) - { + { + gmyth_debug( "MONITOR: message type == GMYTH_BACKEND_PROGRAM_INFO_CHANGED, msg = %s", *back_msg_action ); msg_type = GMYTH_BACKEND_PROGRAM_INFO_CHANGED; } @@ -344,12 +347,11 @@ } static void -gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message, - gpointer live_tv, gpointer user_data ) +gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message ) { //assert( message!= NULL ); - gmyth_debug( "DEFAULT Signal handler ( msg = %s, code = %d, file_transfer ptr. = %p )\n", - message, msg_code, live_tv ); + gmyth_debug( "DEFAULT Signal handler ( msg = %s, code = %d )\n", + message, msg_code ); } static void @@ -362,8 +364,9 @@ //gmyth_monitor_handler_listener (GMythMonitorHandler *monitor, gpointer user_data) //static gboolean //gmyth_monitor_handler_listener( GIOChannel *io_channel, GIOCondition condition, gpointer data ) -gboolean* -gmyth_monitor_handler_listener( GMythMonitorHandler *monitor ) +//gboolean* gmyth_monitor_handler_listener( GMythMonitorHandler *monitor ) +void +gmyth_monitor_handler_listener (GMythMonitorHandler *monitor, gpointer user_data) { //GMythMonitorHandler *monitor = (GMythMonitorHandler*)data; GIOStatus io_status; @@ -427,7 +430,7 @@ g_signal_emit ( monitor, GMYTH_MONITOR_HANDLER_GET_CLASS (monitor)->backend_events_handler_signal_id, 0, /* details */ - msg_type, back_msg_action, NULL ); + msg_type, back_msg_action ); if (back_msg_action!= NULL) g_free( back_msg_action ); @@ -463,7 +466,7 @@ if (strlist!=NULL) g_object_unref( strlist ); - return ret; + return; } @@ -542,11 +545,13 @@ *ret = TRUE; /*if (!g_thread_supported () ) g_thread_init (NULL);*/ - - monitor->monitor_th = g_thread_create( (GThreadFunc)gmyth_monitor_handler_listener, + /* + monitor->monitor_th = g_thread_pool_new( (GThreadFunc)gmyth_monitor_handler_listener, monitor, TRUE, NULL ); - - //g_thread_pool_push( monitor_th, monitor, NULL ); + */ + monitor->monitor_th = g_thread_pool_new( (GFunc)gmyth_monitor_handler_listener, + monitor, 3, TRUE, NULL ); + g_thread_pool_push( monitor->monitor_th, monitor, NULL ); //if ( ( ret = g_thread_join( monitor_th ) ) == FALSE ) if ( monitor->monitor_th != NULL ) diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_monitor_handler.h --- a/gmyth/src/gmyth_monitor_handler.h Tue Dec 19 21:29:51 2006 +0000 +++ b/gmyth/src/gmyth_monitor_handler.h Tue Dec 19 23:28:32 2006 +0000 @@ -71,8 +71,7 @@ guint backend_events_handler_signal_id; /* signal default handlers */ - void (*backend_events_handler) (GMythMonitorHandler *monitor, gint msg_code, gchar* message, - gpointer livetv, gpointer user_data ); + void (*backend_events_handler) (GMythMonitorHandler *monitor, gint msg_code, gchar* message ); }; struct _GMythMonitorHandler @@ -85,9 +84,10 @@ /* socket descriptors */ GMythSocket *event_sock; - GThread *monitor_th; + GThreadPool *monitor_th; - gboolean* (*gmyth_monitor_handler_listener)( GMythMonitorHandler *monitor ); + // gboolean* (*gmyth_monitor_handler_listener)( GMythMonitorHandler *monitor ); + void (*gmyth_monitor_handler_listener)( GMythMonitorHandler *monitor, gpointer user_data ); gchar *hostname; gint port;