aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2014-04-07 18:17:39 +0000
committerChristian Grothoff <christian@grothoff.org>2014-04-07 18:17:39 +0000
commitd45fe94a7d9600836ac9e3ef74aae8c568a5c154 (patch)
tree36d55c6a659460cfec075655e5edf2a8e203325f /src/main
parent789fcb27083c90e79d28b5ead5aef13fef6137dd (diff)
downloadgnunet-gtk-d45fe94a7d9600836ac9e3ef74aae8c568a5c154.tar.gz
gnunet-gtk-d45fe94a7d9600836ac9e3ef74aae8c568a5c154.zip
-fix segv on shutdown
Diffstat (limited to 'src/main')
-rw-r--r--src/main/gnunet-gtk.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/main/gnunet-gtk.c b/src/main/gnunet-gtk.c
index f28e5749..3cc29b0d 100644
--- a/src/main/gnunet-gtk.c
+++ b/src/main/gnunet-gtk.c
@@ -74,6 +74,11 @@ struct Plug
74 */ 74 */
75 GNUNET_SCHEDULER_TaskIdentifier restart_task; 75 GNUNET_SCHEDULER_TaskIdentifier restart_task;
76 76
77 /**
78 * ID of the signal associated with the window.
79 */
80 gulong sig_id;
81
77}; 82};
78 83
79 84
@@ -145,6 +150,8 @@ cleanup_task (void *cls,
145 GNUNET_SCHEDULER_cancel (p->restart_task); 150 GNUNET_SCHEDULER_cancel (p->restart_task);
146 p->restart_task = GNUNET_SCHEDULER_NO_TASK; 151 p->restart_task = GNUNET_SCHEDULER_NO_TASK;
147 } 152 }
153 g_signal_handler_disconnect (p->s,
154 p->sig_id);
148 GNUNET_CONTAINER_DLL_remove (p_head, 155 GNUNET_CONTAINER_DLL_remove (p_head,
149 p_tail, 156 p_tail,
150 p); 157 p);
@@ -230,9 +237,12 @@ handle_remove (GtkSocket *sock,
230{ 237{
231 struct Plug *p = userdata; 238 struct Plug *p = userdata;
232 239
233 (void) GNUNET_OS_process_kill (p->proc, SIGTERM); 240 if (NULL != p->proc)
234 GNUNET_OS_process_destroy (p->proc); 241 {
235 p->proc = NULL; 242 (void) GNUNET_OS_process_kill (p->proc, SIGTERM);
243 GNUNET_OS_process_destroy (p->proc);
244 p->proc = NULL;
245 }
236 p->backoff = GNUNET_TIME_STD_BACKOFF (p->backoff); 246 p->backoff = GNUNET_TIME_STD_BACKOFF (p->backoff);
237 p->restart_task = GNUNET_SCHEDULER_add_delayed (p->backoff, 247 p->restart_task = GNUNET_SCHEDULER_add_delayed (p->backoff,
238 &restart_process, 248 &restart_process,
@@ -264,10 +274,10 @@ plug (const char *container,
264 gtk_container_add (v, p->s); 274 gtk_container_add (v, p->s);
265 p->binary = binary; 275 p->binary = binary;
266 p->env_var = env_var; 276 p->env_var = env_var;
267 g_signal_connect (p->s, 277 p->sig_id = g_signal_connect (p->s,
268 "plug-removed", 278 "plug-removed",
269 G_CALLBACK (handle_remove), 279 G_CALLBACK (handle_remove),
270 p); 280 p);
271 start_process (p); 281 start_process (p);
272 gtk_widget_show (p->s); 282 gtk_widget_show (p->s);
273 GNUNET_CONTAINER_DLL_insert (p_head, 283 GNUNET_CONTAINER_DLL_insert (p_head,