Commit 8363ad9342294c2203b3952fde97fc90e177e1cc

Authored by Perry Werneck
1 parent 0f1e1eaf

Corrigindo erro no cleanup do timer 3270.

Showing 1 changed file with 16 additions and 13 deletions   Show diff stats
src/pw3270/v3270/oia.c
@@ -816,7 +816,7 @@ struct timer_info @@ -816,7 +816,7 @@ struct timer_info
816 816
817 static void release_timer(struct timer_info *info) 817 static void release_timer(struct timer_info *info)
818 { 818 {
819 - trace("Timer %p stops",info); 819 + trace("%s: info=%p",__FUNCTION__,info);
820 820
821 info->terminal->timer = NULL; 821 info->terminal->timer = NULL;
822 822
@@ -1030,10 +1030,9 @@ void v3270_start_timer(GtkWidget *widget) @@ -1030,10 +1030,9 @@ void v3270_start_timer(GtkWidget *widget)
1030 struct timer_info *info; 1030 struct timer_info *info;
1031 v3270 *terminal = GTK_V3270(widget); 1031 v3270 *terminal = GTK_V3270(widget);
1032 1032
1033 - trace("Timer %p starts",terminal);  
1034 -  
1035 if(terminal->timer) 1033 if(terminal->timer)
1036 { 1034 {
  1035 + trace("Timer %p starts again",terminal->timer);
1037 g_source_ref(terminal->timer); 1036 g_source_ref(terminal->timer);
1038 return; 1037 return;
1039 } 1038 }
@@ -1047,9 +1046,10 @@ void v3270_start_timer(GtkWidget *widget) @@ -1047,9 +1046,10 @@ void v3270_start_timer(GtkWidget *widget)
1047 terminal->timer = g_timeout_source_new(100); 1046 terminal->timer = g_timeout_source_new(100);
1048 g_source_set_callback(terminal->timer,(GSourceFunc) update_timer, info, (GDestroyNotify) release_timer); 1047 g_source_set_callback(terminal->timer,(GSourceFunc) update_timer, info, (GDestroyNotify) release_timer);
1049 1048
1050 - g_source_attach(terminal->timer, NULL); 1049 + g_source_attach(terminal->timer,NULL);
1051 g_source_unref(terminal->timer); 1050 g_source_unref(terminal->timer);
1052 1051
  1052 + trace("Timer %p starts",terminal->timer);
1053 1053
1054 } 1054 }
1055 1055
@@ -1057,17 +1057,20 @@ void v3270_stop_timer(GtkWidget *widget) @@ -1057,17 +1057,20 @@ void v3270_stop_timer(GtkWidget *widget)
1057 { 1057 {
1058 v3270 *terminal = GTK_V3270(widget); 1058 v3270 *terminal = GTK_V3270(widget);
1059 1059
1060 - trace("%s(%p)",__FUNCTION__,terminal->timer);  
1061 -  
1062 -// if(!terminal->timer)  
1063 -// return;  
1064 -  
1065 -// trace("Timer=%p",terminal->timer);  
1066 -// if(terminal->timer->ref_count < 2)  
1067 -// g_source_destroy(terminal->timer); 1060 + trace("Timer %p stops",terminal->timer);
1068 1061
1069 if(terminal->timer) 1062 if(terminal->timer)
1070 - g_source_unref(terminal->timer); 1063 + {
  1064 + if(terminal->timer->ref_count < 2)
  1065 + {
  1066 + g_source_destroy(terminal->timer);
  1067 + }
  1068 + else
  1069 + {
  1070 + g_source_unref(terminal->timer);
  1071 + }
  1072 + }
  1073 +
1071 } 1074 }
1072 1075
1073 void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state) 1076 void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state)