Commit 24669a81f28667db46bed174ab26118eb87fd4e4

Authored by Perry Werneck
1 parent d6b8032f
Exists in master and in 1 other branch develop

Fixing valgrind's detections.

src/dialogs/colorscheme.c
@@ -126,8 +126,8 @@ @@ -126,8 +126,8 @@
126 126
127 static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkRGBA *clr) 127 static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkRGBA *clr)
128 { 128 {
129 - const gchar * val;  
130 - size_t f; 129 + gchar * val;
  130 + size_t f;
131 131
132 // Load base colors 132 // Load base colors
133 val = g_key_file_get_string(conf,group,"base",NULL); 133 val = g_key_file_get_string(conf,group,"base",NULL);
@@ -165,7 +165,7 @@ @@ -165,7 +165,7 @@
165 165
166 } 166 }
167 g_strfreev(str); 167 g_strfreev(str);
168 - 168 + g_free(val);
169 } 169 }
170 else 170 else
171 { 171 {
@@ -194,6 +194,7 @@ @@ -194,6 +194,7 @@
194 gdk_rgba_parse(clr+V3270_COLOR_FIELD+f,str[f]); 194 gdk_rgba_parse(clr+V3270_COLOR_FIELD+f,str[f]);
195 195
196 g_strfreev(str); 196 g_strfreev(str);
  197 + g_free(val);
197 } 198 }
198 199
199 // Load selection colors 200 // Load selection colors
@@ -208,6 +209,7 @@ @@ -208,6 +209,7 @@
208 gdk_rgba_parse(clr+V3270_COLOR_SELECTED_BG+f,str[f]); 209 gdk_rgba_parse(clr+V3270_COLOR_SELECTED_BG+f,str[f]);
209 210
210 g_strfreev(str); 211 g_strfreev(str);
  212 + g_free(val);
211 } 213 }
212 214
213 // Load OIA colors 215 // Load OIA colors
@@ -243,6 +245,7 @@ @@ -243,6 +245,7 @@
243 } 245 }
244 246
245 g_strfreev(str); 247 g_strfreev(str);
  248 + g_free(val);
246 } 249 }
247 250
248 // Setup extended elements 251 // Setup extended elements
@@ -250,7 +253,10 @@ @@ -250,7 +253,10 @@
250 253
251 val = g_key_file_get_string(conf,group,"cross-hair",NULL); 254 val = g_key_file_get_string(conf,group,"cross-hair",NULL);
252 if(val) 255 if(val)
  256 + {
253 gdk_rgba_parse(clr+V3270_COLOR_CROSS_HAIR,val); 257 gdk_rgba_parse(clr+V3270_COLOR_CROSS_HAIR,val);
  258 + g_free(val);
  259 + }
254 260
255 } 261 }
256 262
@@ -297,7 +303,7 @@ @@ -297,7 +303,7 @@
297 { 303 {
298 // Setup colors for current entry 304 // Setup colors for current entry
299 GdkRGBA * clr = GTK_V3270_COLOR_SCHEME(widget)->schemes+index; 305 GdkRGBA * clr = GTK_V3270_COLOR_SCHEME(widget)->schemes+index;
300 - const gchar * label = g_key_file_get_locale_string(conf,group[g],"label",NULL,NULL); 306 + gchar * label = g_key_file_get_locale_string(conf,group[g],"label",NULL,NULL);
301 307
302 load_color_scheme(conf,group[g],clr); 308 load_color_scheme(conf,group[g],clr);
303 309
@@ -308,6 +314,8 @@ @@ -308,6 +314,8 @@
308 1, clr, 314 1, clr,
309 -1); 315 -1);
310 316
  317 + g_free(label);
  318 +
311 // move to next color list 319 // move to next color list
312 index += V3270_COLOR_COUNT; 320 index += V3270_COLOR_COUNT;
313 } 321 }
src/include/v3270.h
@@ -78,6 +78,7 @@ @@ -78,6 +78,7 @@
78 guint top; 78 guint top;
79 79
80 gchar * family; 80 gchar * family;
  81 + cairo_font_face_t * face;
81 cairo_font_weight_t weight; 82 cairo_font_weight_t weight;
82 cairo_scaled_font_t * scaled; 83 cairo_scaled_font_t * scaled;
83 84
src/terminal/font.c
@@ -79,7 +79,15 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, @@ -79,7 +79,15 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width,
79 79
80 terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; 80 terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
81 81
82 - cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight); 82 + if(terminal->font.face)
  83 + {
  84 + cairo_font_face_destroy(terminal->font.face);
  85 + }
  86 +
  87 + terminal->font.face = cairo_toy_font_face_create(terminal->font.family, CAIRO_FONT_SLANT_NORMAL, terminal->font.weight);
  88 + cairo_set_font_face(cr,terminal->font.face);
  89 +
  90 + // cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight);
83 91
84 if(terminal->font.scaled) 92 if(terminal->font.scaled)
85 { 93 {
src/terminal/widget.c
@@ -232,6 +232,16 @@ static void v3270_toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3 @@ -232,6 +232,16 @@ static void v3270_toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3
232 static void finalize(GObject *object) 232 static void finalize(GObject *object)
233 { 233 {
234 debug("V3270::%s",__FUNCTION__); 234 debug("V3270::%s",__FUNCTION__);
  235 +
  236 + v3270 * terminal = GTK_V3270(object);
  237 +
  238 + if(terminal->host)
  239 + {
  240 + // Release session
  241 + lib3270_session_free(terminal->host);
  242 + terminal->host = NULL;
  243 + }
  244 +
235 G_OBJECT_CLASS(v3270_parent_class)->finalize(object); 245 G_OBJECT_CLASS(v3270_parent_class)->finalize(object);
236 } 246 }
237 247
@@ -579,10 +589,6 @@ static void v3270_destroy(GtkWidget *widget) @@ -579,10 +589,6 @@ static void v3270_destroy(GtkWidget *widget)
579 // Cleanup 589 // Cleanup
580 lib3270_reset_callbacks(terminal->host); 590 lib3270_reset_callbacks(terminal->host);
581 lib3270_set_user_data(terminal->host,NULL); 591 lib3270_set_user_data(terminal->host,NULL);
582 -  
583 - // Release session  
584 - lib3270_session_free(terminal->host);  
585 - terminal->host = NULL;  
586 } 592 }
587 593
588 if(terminal->accessible) 594 if(terminal->accessible)
@@ -604,6 +610,11 @@ static void v3270_destroy(GtkWidget *widget) @@ -604,6 +610,11 @@ static void v3270_destroy(GtkWidget *widget)
604 terminal->font.scaled = NULL; 610 terminal->font.scaled = NULL;
605 } 611 }
606 612
  613 + if(terminal->font.face) {
  614 + cairo_font_face_destroy(terminal->font.face);
  615 + terminal->font.face = NULL;
  616 + }
  617 +
607 if(terminal->surface) 618 if(terminal->surface)
608 { 619 {
609 cairo_surface_destroy(terminal->surface); 620 cairo_surface_destroy(terminal->surface);
src/trace/widget.c
@@ -110,6 +110,8 @@ @@ -110,6 +110,8 @@
110 if(widget->hSession == hSession) 110 if(widget->hSession == hSession)
111 return; 111 return;
112 112
  113 + debug("%s: Session changes %p -> %p", __FUNCTION__, widget->hSession, hSession);
  114 +
113 if(widget->hSession) { 115 if(widget->hSession) {
114 lib3270_set_trace_handler(widget->hSession,widget->trace.handler,widget->trace.userdata); 116 lib3270_set_trace_handler(widget->hSession,widget->trace.handler,widget->trace.userdata);
115 } 117 }
valgrind.suppression
@@ -97,3 +97,44 @@ @@ -97,3 +97,44 @@
97 fun:g_type_create_instance 97 fun:g_type_create_instance
98 } 98 }
99 99
  100 +{
  101 + fontconfig_FcPatternDuplicate
  102 + Memcheck:Leak
  103 + ...
  104 + fun:FcPatternDuplicate
  105 +}
  106 +
  107 +{
  108 + gtk_style_context_set_state
  109 + Memcheck:Leak
  110 + ...
  111 + fun:gtk_style_context_set_state
  112 +}
  113 +
  114 +{
  115 + g_param_spec_flags
  116 + Memcheck:Leak
  117 + ...
  118 + fun:g_param_spec_flags
  119 +}
  120 +
  121 +{
  122 + gtk_style_new
  123 + Memcheck:Leak
  124 + ...
  125 + fun:gtk_style_new
  126 +}
  127 +
  128 +{
  129 + libcrypto_BIO_read
  130 + Memcheck:Cond
  131 + fun:BIO_read
  132 +}
  133 +
  134 +{
  135 + cairo_mask
  136 + Memcheck:Cond
  137 + ...
  138 + fun:cairo_mask
  139 +}
  140 +