Commit 981cc52ad3a9bfccb47492491a10477b59ed5427

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

Fixing trace window segfaults on main application.

src/include/v3270.h
@@ -165,7 +165,7 @@ @@ -165,7 +165,7 @@
165 #endif // v3270_char 165 #endif // v3270_char
166 166
167 LIB3270_EXPORT GtkWidget * v3270_new(void); 167 LIB3270_EXPORT GtkWidget * v3270_new(void);
168 - LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget); 168 + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget, const gchar *header);
169 LIB3270_EXPORT GType v3270_get_type(void); 169 LIB3270_EXPORT GType v3270_get_type(void);
170 LIB3270_EXPORT void v3270_reload(GtkWidget * widget); 170 LIB3270_EXPORT void v3270_reload(GtkWidget * widget);
171 LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name); 171 LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name);
src/include/v3270/trace.h
@@ -50,11 +50,14 @@ @@ -50,11 +50,14 @@
50 typedef struct _v3270_traceClass v3270_traceClass; 50 typedef struct _v3270_traceClass v3270_traceClass;
51 51
52 LIB3270_EXPORT GtkWidget * v3270_trace_new(); 52 LIB3270_EXPORT GtkWidget * v3270_trace_new();
53 - LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession); 53 +
  54 + LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession, const gchar *header);
  55 +
54 LIB3270_EXPORT void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession); 56 LIB3270_EXPORT void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession);
55 LIB3270_EXPORT GType v3270_trace_get_type(void); 57 LIB3270_EXPORT GType v3270_trace_get_type(void);
56 LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); 58 LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args);
57 LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); 59 LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... );
  60 + LIB3270_EXPORT void v3270_trace_append_text(GtkWidget *widget, const gchar *text);
58 LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget); 61 LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget);
59 LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on); 62 LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on);
60 LIB3270_EXPORT void v3270_trace_set_font_from_string(GtkWidget *widget, const gchar *name); 63 LIB3270_EXPORT void v3270_trace_set_font_from_string(GtkWidget *widget, const gchar *name);
src/testprogram/testprogram.c
@@ -91,6 +91,7 @@ static void trace_window_destroy(G_GNUC_UNUSED GtkWidget *widget, H3270 *hSessio @@ -91,6 +91,7 @@ static void trace_window_destroy(G_GNUC_UNUSED GtkWidget *widget, H3270 *hSessio
91 lib3270_set_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE,0); 91 lib3270_set_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE,0);
92 } 92 }
93 93
  94 +
94 static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, GtkWidget *terminal) { 95 static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, GtkWidget *terminal) {
95 96
96 debug("%s=%p",__FUNCTION__,colors); 97 debug("%s=%p",__FUNCTION__,colors);
@@ -128,7 +129,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { @@ -128,7 +129,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
128 // gchar * filename = NULL; 129 // gchar * filename = NULL;
129 GValue val = G_VALUE_INIT; 130 GValue val = G_VALUE_INIT;
130 131
131 - GtkWidget *trace = v3270_new_trace_window(terminal); 132 + GtkWidget *trace = v3270_new_trace_window(terminal,NULL);
132 if(trace) { 133 if(trace) {
133 g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); 134 g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal));
134 lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); 135 lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE);
src/trace/trace.c
@@ -82,6 +82,8 @@ @@ -82,6 +82,8 @@
82 82
83 G_DEFINE_TYPE(v3270_trace, v3270_trace, GTK_TYPE_WINDOW); 83 G_DEFINE_TYPE(v3270_trace, v3270_trace, GTK_TYPE_WINDOW);
84 84
  85 + static void append_text(v3270_trace *hwnd, const gchar *text);
  86 +
85 /*--[ Implement ]------------------------------------------------------------------------------------*/ 87 /*--[ Implement ]------------------------------------------------------------------------------------*/
86 88
87 const GtkWindowClass * v3270_trace_get_parent_class(void) 89 const GtkWindowClass * v3270_trace_get_parent_class(void)
@@ -394,9 +396,10 @@ static void destroy(GtkWidget *widget) @@ -394,9 +396,10 @@ static void destroy(GtkWidget *widget)
394 return g_object_new(V3270_TYPE_TRACE, NULL); 396 return g_object_new(V3270_TYPE_TRACE, NULL);
395 } 397 }
396 398
397 - LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget) 399 + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget, const gchar *header)
398 { 400 {
399 - return v3270_trace_new_from_session(v3270_get_session(widget)); 401 + g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
  402 + return v3270_trace_new_from_session(v3270_get_session(widget), header);
400 } 403 }
401 404
402 static void trace_handler(H3270 *hSession, void *userdata, const char *fmt, va_list args) 405 static void trace_handler(H3270 *hSession, void *userdata, const char *fmt, va_list args)
@@ -425,7 +428,7 @@ static void destroy(GtkWidget *widget) @@ -425,7 +428,7 @@ static void destroy(GtkWidget *widget)
425 428
426 } 429 }
427 430
428 - LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession) { 431 + LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession, const gchar *header) {
429 432
430 GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL); 433 GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL);
431 void * terminal = lib3270_get_user_data(hSession); 434 void * terminal = lib3270_get_user_data(hSession);
@@ -441,6 +444,9 @@ static void destroy(GtkWidget *widget) @@ -441,6 +444,9 @@ static void destroy(GtkWidget *widget)
441 444
442 v3270_trace_set_session(widget, hSession); 445 v3270_trace_set_session(widget, hSession);
443 446
  447 + if(header)
  448 + append_text(V3270_TRACE(widget), header);
  449 +
444 return widget; 450 return widget;
445 } 451 }
446 452
@@ -450,17 +456,15 @@ static void destroy(GtkWidget *widget) @@ -450,17 +456,15 @@ static void destroy(GtkWidget *widget)
450 gchar * msg; 456 gchar * msg;
451 }; 457 };
452 458
453 - static gboolean bg_trace_vprintf(struct bg_print_data *data) 459 + static void append_text(v3270_trace *hwnd, const gchar *text)
454 { 460 {
455 -  
456 - GtkTextIter itr;  
457 - v3270_trace * hwnd = V3270_TRACE(data->widget); 461 + GtkTextIter itr;
458 462
459 gtk_text_buffer_get_end_iter(hwnd->text,&itr); 463 gtk_text_buffer_get_end_iter(hwnd->text,&itr);
460 464
461 - if(g_utf8_validate(data->msg,strlen(data->msg),NULL)) 465 + if(g_utf8_validate(text,strlen(text),NULL))
462 { 466 {
463 - gtk_text_buffer_insert(hwnd->text,&itr,data->msg,strlen(data->msg)); 467 + gtk_text_buffer_insert(hwnd->text,&itr,text,strlen(text));
464 } 468 }
465 else 469 else
466 { 470 {
@@ -473,11 +477,23 @@ static void destroy(GtkWidget *widget) @@ -473,11 +477,23 @@ static void destroy(GtkWidget *widget)
473 //GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll)); 477 //GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll));
474 //gtk_adjustment_set_value(vadj,gtk_adjustment_get_upper(vadj)); 478 //gtk_adjustment_set_value(vadj,gtk_adjustment_get_upper(vadj));
475 //gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll), vadj); 479 //gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll), vadj);
  480 + }
476 481
  482 + static gboolean bg_trace_append_text(struct bg_print_data *data)
  483 + {
  484 + append_text(V3270_TRACE(data->widget),data->msg);
477 g_free(data->msg); 485 g_free(data->msg);
478 -  
479 return FALSE; 486 return FALSE;
  487 + }
480 488
  489 + void v3270_trace_append_text(GtkWidget *widget, const gchar *text)
  490 + {
  491 + struct bg_print_data * data = g_new0(struct bg_print_data,1);
  492 +
  493 + data->widget = widget;
  494 + data->msg = g_strdup(text);
  495 +
  496 + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_append_text, data, g_free);
481 } 497 }
482 498
483 void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) 499 void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args)
@@ -487,8 +503,7 @@ static void destroy(GtkWidget *widget) @@ -487,8 +503,7 @@ static void destroy(GtkWidget *widget)
487 data->widget = widget; 503 data->widget = widget;
488 data->msg = g_strdup_vprintf(fmt,args); 504 data->msg = g_strdup_vprintf(fmt,args);
489 505
490 - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_vprintf, data, g_free);  
491 - 506 + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_append_text, data, g_free);
492 } 507 }
493 508
494 void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ) 509 void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... )
src/v3270/iocallback.c
@@ -144,13 +144,12 @@ gpointer BgCall(struct bgParameter *p) @@ -144,13 +144,12 @@ gpointer BgCall(struct bgParameter *p)
144 144
145 static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void *parm) 145 static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void *parm)
146 { 146 {
  147 +// return callback(hSession,parm);
  148 +
147 struct bgParameter p = { TRUE, hSession, -1, callback, parm }; 149 struct bgParameter p = { TRUE, hSession, -1, callback, parm };
148 150
149 trace("%s starts -------------------------------------", __FUNCTION__); 151 trace("%s starts -------------------------------------", __FUNCTION__);
150 152
151 -// p.rc = callback(hSession,parm);  
152 -  
153 -  
154 p.running = TRUE; 153 p.running = TRUE;
155 154
156 GThread *thread = g_thread_new(PACKAGE_NAME, (GThreadFunc) BgCall, &p); 155 GThread *thread = g_thread_new(PACKAGE_NAME, (GThreadFunc) BgCall, &p);
@@ -171,6 +170,7 @@ static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void @@ -171,6 +170,7 @@ static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void
171 trace("%s ends ---------------------------------------", __FUNCTION__); 170 trace("%s ends ---------------------------------------", __FUNCTION__);
172 171
173 return p.rc; 172 return p.rc;
  173 +
174 } 174 }
175 175
176 void v3270_register_io_handlers(G_GNUC_UNUSED v3270Class *cls) 176 void v3270_register_io_handlers(G_GNUC_UNUSED v3270Class *cls)