|
Jakub Filak |
df52438 |
From c781531f2c04be3d99830a28997e7b1fb2132dba Mon Sep 17 00:00:00 2001
|
|
Jakub Filak |
df52438 |
From: Jakub Filak <jfilak@redhat.com>
|
|
Jakub Filak |
df52438 |
Date: Thu, 28 Aug 2014 12:22:39 +0200
|
|
Jakub Filak |
df52438 |
Subject: [PATCH 30/33] wizard: don't work with destroyed widgets
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
Resolves rhbz#1133055
|
|
Jakub Filak |
df52438 |
Related to rhbz#1069917
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
Jakub Filak |
df52438 |
---
|
|
Jakub Filak |
df52438 |
src/gui-wizard-gtk/wizard.c | 35 ++++++++++++++++++++++++++++-------
|
|
Jakub Filak |
df52438 |
1 file changed, 28 insertions(+), 7 deletions(-)
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
|
|
Jakub Filak |
df52438 |
index f0445eb..8620823 100644
|
|
Jakub Filak |
df52438 |
--- a/src/gui-wizard-gtk/wizard.c
|
|
Jakub Filak |
df52438 |
+++ b/src/gui-wizard-gtk/wizard.c
|
|
Jakub Filak |
df52438 |
@@ -57,6 +57,7 @@ static char *g_event_selected;
|
|
Jakub Filak |
df52438 |
static unsigned g_black_event_count = 0;
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
static pid_t g_event_child_pid = 0;
|
|
Jakub Filak |
df52438 |
+static guint g_event_source_id = 0;
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
static bool g_expert_mode;
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
@@ -1529,10 +1530,18 @@ static void update_event_log_on_disk(const char *str)
|
|
Jakub Filak |
df52438 |
dd_close(dd);
|
|
Jakub Filak |
df52438 |
}
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
+static bool cancel_event_run()
|
|
Jakub Filak |
df52438 |
+{
|
|
Jakub Filak |
df52438 |
+ if (g_event_child_pid <= 0)
|
|
Jakub Filak |
df52438 |
+ return false;
|
|
Jakub Filak |
df52438 |
+
|
|
Jakub Filak |
df52438 |
+ kill(- g_event_child_pid, SIGTERM);
|
|
Jakub Filak |
df52438 |
+ return true;
|
|
Jakub Filak |
df52438 |
+}
|
|
Jakub Filak |
df52438 |
+
|
|
Jakub Filak |
df52438 |
static void on_btn_cancel_event(GtkButton *button)
|
|
Jakub Filak |
df52438 |
{
|
|
Jakub Filak |
df52438 |
- if (g_event_child_pid > 0)
|
|
Jakub Filak |
df52438 |
- kill(- g_event_child_pid, SIGTERM);
|
|
Jakub Filak |
df52438 |
+ cancel_event_run();
|
|
Jakub Filak |
df52438 |
}
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
static bool is_processing_finished()
|
|
Jakub Filak |
df52438 |
@@ -1938,8 +1947,10 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g
|
|
Jakub Filak |
df52438 |
: _("Processing finished, please proceed to the next step."));
|
|
Jakub Filak |
df52438 |
}
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
- /*g_source_remove(evd->event_source_id);*/
|
|
Jakub Filak |
df52438 |
+ g_source_remove(g_event_source_id);
|
|
Jakub Filak |
df52438 |
+ g_event_source_id = 0;
|
|
Jakub Filak |
df52438 |
close(evd->fd);
|
|
Jakub Filak |
df52438 |
+ g_io_channel_unref(evd->channel);
|
|
Jakub Filak |
df52438 |
free_run_event_state(evd->run_state);
|
|
Jakub Filak |
df52438 |
strbuf_free(evd->event_log);
|
|
Jakub Filak |
df52438 |
free(evd->event_name);
|
|
Jakub Filak |
df52438 |
@@ -2108,7 +2119,7 @@ static void start_event_run(const char *event_name)
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
ndelay_on(evd->fd);
|
|
Jakub Filak |
df52438 |
evd->channel = g_io_channel_unix_new(evd->fd);
|
|
Jakub Filak |
df52438 |
- /*evd->event_source_id = */ g_io_add_watch(evd->channel,
|
|
Jakub Filak |
df52438 |
+ g_event_source_id = g_io_add_watch(evd->channel,
|
|
Jakub Filak |
df52438 |
G_IO_IN | G_IO_ERR | G_IO_HUP, /* need HUP to detect EOF w/o any data */
|
|
Jakub Filak |
df52438 |
consume_cmd_output,
|
|
Jakub Filak |
df52438 |
evd
|
|
Jakub Filak |
df52438 |
@@ -3385,13 +3396,23 @@ static void init_pages(void)
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
static void assistant_quit_cb(void *obj, void *data)
|
|
Jakub Filak |
df52438 |
{
|
|
Jakub Filak |
df52438 |
+ /* Suppress execution of consume_cmd_output() */
|
|
Jakub Filak |
df52438 |
+ if (g_event_source_id != 0)
|
|
Jakub Filak |
df52438 |
+ {
|
|
Jakub Filak |
df52438 |
+ g_source_remove(g_event_source_id);
|
|
Jakub Filak |
df52438 |
+ g_event_source_id = 0;
|
|
Jakub Filak |
df52438 |
+ }
|
|
Jakub Filak |
df52438 |
+
|
|
Jakub Filak |
df52438 |
+ cancel_event_run();
|
|
Jakub Filak |
df52438 |
+
|
|
Jakub Filak |
df52438 |
if (g_loaded_texts)
|
|
Jakub Filak |
df52438 |
{
|
|
Jakub Filak |
df52438 |
g_hash_table_destroy(g_loaded_texts);
|
|
Jakub Filak |
df52438 |
g_loaded_texts = NULL;
|
|
Jakub Filak |
df52438 |
}
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
- gtk_widget_destroy(GTK_WIDGET(data));
|
|
Jakub Filak |
df52438 |
+ gtk_widget_destroy(GTK_WIDGET(g_wnd_assistant));
|
|
Jakub Filak |
df52438 |
+ g_wnd_assistant = (void *)0xdeadbeaf;
|
|
Jakub Filak |
df52438 |
}
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
static void on_btn_startcast(GtkWidget *btn, gpointer user_data)
|
|
Jakub Filak |
df52438 |
@@ -3562,13 +3583,13 @@ void create_assistant(GtkApplication *app, bool expert_mode)
|
|
Jakub Filak |
df52438 |
ProblemDetailsWidget *details = problem_details_widget_new(g_cd);
|
|
Jakub Filak |
df52438 |
gtk_container_add(GTK_CONTAINER(g_container_details1), GTK_WIDGET(details));
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
- g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), g_wnd_assistant);
|
|
Jakub Filak |
df52438 |
+ g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), NULL);
|
|
Jakub Filak |
df52438 |
g_signal_connect(g_btn_stop, "clicked", G_CALLBACK(on_btn_cancel_event), NULL);
|
|
Jakub Filak |
df52438 |
g_signal_connect(g_btn_onfail, "clicked", G_CALLBACK(on_btn_failed_cb), NULL);
|
|
Jakub Filak |
df52438 |
g_signal_connect(g_btn_repeat, "clicked", G_CALLBACK(on_btn_repeat_cb), NULL);
|
|
Jakub Filak |
df52438 |
g_signal_connect(g_btn_next, "clicked", G_CALLBACK(on_next_btn_cb), NULL);
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
- g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), g_wnd_assistant);
|
|
Jakub Filak |
df52438 |
+ g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), NULL);
|
|
Jakub Filak |
df52438 |
g_signal_connect(g_assistant, "switch-page", G_CALLBACK(on_page_prepare), NULL);
|
|
Jakub Filak |
df52438 |
|
|
Jakub Filak |
df52438 |
g_signal_connect(g_tb_approve_bt, "toggled", G_CALLBACK(on_bt_approve_toggle), NULL);
|
|
Jakub Filak |
df52438 |
--
|
|
Jakub Filak |
df52438 |
2.1.0
|
|
Jakub Filak |
df52438 |
|