Not quite the fix suggested by Eric Rannaud <eric.rannaud@gmail.com>
because we have traditionally used SIGINT to get partial layouts.
Just prevent -Tgtk, -Txlib, or any other event-handling devices from rendering
after an interrupt.
#ifndef WIN32
static void intr(int s)
{
+/* if interrupted we try to produce a partial rendering before exiting */
if (G)
gvRenderJobs(Gvc, G);
+/* Note that we don't call gvFinalize() so that we don't start event-driven
+ * devices like -Tgtk or -Txlib */
exit (gvFreeContext(Gvc));
}
prev = G;
}
}
+ gvFinalize(Gvc);
return (gvFreeContext(Gvc));
}
}
/* the last job, after all input graphs are processed,
- * is finalized from gvFreeContext()
+ * is finalized from gvFinalize()
*/
prevjob = job;
}
extern int gvFreeLayout(GVC_t *gvc, graph_t *g);
/* Clean up graphviz context */
+extern void gvFinalize(GVC_t *gvc);
extern int gvFreeContext(GVC_t *gvc);
/** Add a library from your user application
return gvc;
}
+void gvFinalize(GVC_t * gvc)
+{
+ if (gvc->active_jobs)
+ gvrender_end_job(gvc->active_jobs);
+}
+
+
int gvFreeContext(GVC_t * gvc)
{
GVG_t *gvg, *gvg_next;
gvplugin_package_t *package, *package_next;
- if (gvc->active_jobs)
- gvrender_end_job(gvc->active_jobs);
emit_once_reset();
gvg_next = gvc->gvgs;
while ((gvg = gvg_next)) {