From 9b171679a3b03c25183b40ada5fcee8bb83ed393 Mon Sep 17 00:00:00 2001 From: hiro Date: Fri, 4 Nov 2005 09:51:35 +0000 Subject: fixed a crash when the external editor was terminated while opening confirmation dialog. git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@715 ee746299-78ed-0310-b773-934348b2243d --- src/compose.c | 52 +++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) (limited to 'src/compose.c') diff --git a/src/compose.c b/src/compose.c index e18e0a71..f297a47a 100644 --- a/src/compose.c +++ b/src/compose.c @@ -5202,37 +5202,39 @@ static gboolean compose_ext_editor_kill(Compose *compose) GTK_STOCK_YES, GTK_STOCK_NO, NULL); g_free(msg); - if (val == G_ALERTDEFAULT) { + if (val != G_ALERTDEFAULT) + return FALSE; + } + + if (compose->exteditor_tag != 0) { + g_source_remove(compose->exteditor_tag); + compose->exteditor_tag = 0; + } + + if (compose->exteditor_pid != 0) { #ifdef G_OS_WIN32 - if (TerminateProcess(compose->exteditor_pid, 1) == 0) - g_warning("TerminateProcess() failed: %d\n", - GetLastError()); + if (TerminateProcess(compose->exteditor_pid, 1) == 0) + g_warning("TerminateProcess() failed: %d\n", + GetLastError()); #else - if (kill(compose->exteditor_pid, SIGTERM) < 0) - perror("kill"); + if (kill(compose->exteditor_pid, SIGTERM) < 0) + perror("kill"); #endif + g_message("Terminated process group id: %d\n", + compose->exteditor_pid); + g_message("Temporary file: %s\n", + compose->exteditor_file); + compose->exteditor_pid = 0; + } - g_message("Terminated process group id: %d", - compose->exteditor_pid); - g_message("Temporary file: %s", - compose->exteditor_file); - - while (compose->exteditor_pid != 0) - gtk_main_iteration(); - } else - return FALSE; - } else if (compose->exteditor_tag != 0) { - g_source_remove(compose->exteditor_tag); - compose->exteditor_tag = 0; - if (compose->exteditor_file) { - g_unlink(compose->exteditor_file); - g_free(compose->exteditor_file); - compose->exteditor_file = NULL; - } - compose->exteditor_pid = 0; - compose_set_ext_editor_sensitive(compose, TRUE); + if (compose->exteditor_file) { + g_unlink(compose->exteditor_file); + g_free(compose->exteditor_file); + compose->exteditor_file = NULL; } + compose_set_ext_editor_sensitive(compose, TRUE); + return TRUE; } -- cgit v1.2.3