Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/backend/ps
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2007-02-03 11:57:03 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2007-02-03 11:57:03 (GMT)
commit2a93cb5f8df446b1f9c891c8170011a581ba2905 (patch)
tree41608fcfc9810b6cf2a2377d463151d43f4591db /backend/ps
parentddd00abd179948718f537fbed818929d3b3cbced (diff)
Handle ghostscript interpreter crashes.
2007-02-03 Carlos Garcia Campos <carlosgc@gnome.org> * backend/ps/ps-document.c: (ps_interpreter_finished), (ps_interpreter_start), (ps_interpreter_failed): Handle ghostscript interpreter crashes. svn path=/trunk/; revision=2288
Diffstat (limited to 'backend/ps')
-rw-r--r--backend/ps/ps-document.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/backend/ps/ps-document.c b/backend/ps/ps-document.c
index 79f29cb..1e448e3 100644
--- a/backend/ps/ps-document.c
+++ b/backend/ps/ps-document.c
@@ -421,6 +421,16 @@ ps_interpreter_error (GIOChannel *io,
return TRUE;
}
+static void
+ps_interpreter_finished (GPid pid,
+ gint status,
+ PSDocument *gs)
+{
+ g_spawn_close_pid (gs->interpreter_pid);
+ gs->interpreter_pid = -1;
+ ps_interpreter_failed (gs, NULL);
+}
+
#define NUM_ARGS 100
#define NUM_GS_ARGS (NUM_ARGS - 20)
#define NUM_ALPHA_ARGS 10
@@ -485,13 +495,17 @@ ps_interpreter_start (PSDocument *gs)
envp = g_strsplit (gv_env, ";", 2);
g_free (gv_env);
- if (g_spawn_async_with_pipes (dir, argv, NULL, 0,
+ if (g_spawn_async_with_pipes (dir, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
(GSpawnChildSetupFunc)setup_interpreter_env, envp,
&(gs->interpreter_pid),
&pin, &pout, &perr,
&error)) {
GIOFlags flags;
+ g_child_watch_add (gs->interpreter_pid,
+ (GChildWatchFunc)ps_interpreter_finished,
+ gs);
+
gs->interpreter_input = g_io_channel_unix_new (pin);
g_io_channel_set_encoding (gs->interpreter_input, NULL, NULL);
flags = g_io_channel_get_flags (gs->interpreter_input);
@@ -585,8 +599,7 @@ ps_interpreter_stop (PSDocument *gs)
static void
ps_interpreter_failed (PSDocument *gs, const char *msg)
{
- if (msg)
- g_warning (msg);
+ g_warning (msg ? msg : _("Interpreter failed."));
push_pixbuf (gs);
ps_interpreter_stop (gs);