From: <kt...@us...> - 2008-10-22 07:12:05
|
Revision: 2553 http://cutter.svn.sourceforge.net/cutter/?rev=2553&view=rev Author: ktou Date: 2008-10-22 07:12:00 +0000 (Wed, 22 Oct 2008) Log Message: ----------- * gcutter/gcut-spawn.c (dispose): interrupt. Modified Paths: -------------- cutter/trunk/ChangeLog cutter/trunk/gcutter/gcut-spawn.c Modified: cutter/trunk/ChangeLog =================================================================== --- cutter/trunk/ChangeLog 2008-10-22 03:04:31 UTC (rev 2552) +++ cutter/trunk/ChangeLog 2008-10-22 07:12:00 UTC (rev 2553) @@ -1,5 +1,7 @@ 2008-10-22 Kouhei Sutou <ko...@co...> + * gcutter/gcut-spawn.c (dispose): interrupt. + * gcutter/gcut-io-channel-string.[ch], test/gcutter/test-gcut-io-channel-string.c: - gcut_string_io_channel_{get,set}_limit() -> Modified: cutter/trunk/gcutter/gcut-spawn.c =================================================================== --- cutter/trunk/gcutter/gcut-spawn.c 2008-10-22 03:04:31 UTC (rev 2552) +++ cutter/trunk/gcutter/gcut-spawn.c 2008-10-22 07:12:00 UTC (rev 2553) @@ -23,6 +23,7 @@ #include <sys/types.h> #include <sys/wait.h> +#include <signal.h> #include <glib.h> #include <glib/gstdio.h> @@ -194,13 +195,6 @@ } static void -close_child (GCutSpawnPrivate *priv) -{ - g_spawn_close_pid(priv->pid); - priv->pid = 0; -} - -static void remove_output_watch_func (GCutSpawnPrivate *priv) { g_source_remove(priv->output_watch_id); @@ -224,6 +218,10 @@ priv->command = NULL; } + if (priv->process_watch_id && priv->pid) { + kill(priv->pid, SIGINT); + } + if (priv->process_watch_id) remove_child_watch_func(priv); @@ -389,7 +387,8 @@ remove_child_watch_func(priv); waitpid(pid, &status, 0); g_signal_emit(spawn, signals[REAPED], 0, status); - close_child(priv); + g_spawn_close_pid(priv->pid); + priv->pid = 0; } static void @@ -435,6 +434,7 @@ return NULL; g_io_channel_set_close_on_unref(channel, TRUE); + g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL); *watch_id = g_io_add_watch(channel, G_IO_IN | G_IO_PRI | This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |