This is a known bug with ghostscript-9.00
http://bugs.ghostscript.com/show_bug.cgi?id=691619
======================================================================
--- ghostscript-9.00/base/gximag3x.c Tue Aug 10 09:20:19 2010
+++ ghostscript-9.00/base/gximag3x.c Mon Oct 8 03:56:41 2012
@@ -546,6 +546,12 @@
return_error(gs_error_VMerror);
gx_device_bbox_init(bbdev, dev, mem);
gx_device_bbox_fwd_open_close(bbdev, false);
+
+ if (dev->device_icc_profile) {
+ bbdev->device_icc_profile = dev->device_icc_profile;
+ rc_increment(bbdev->device_icc_profile);
+ }
+
code = dev_proc(bbdev, begin_typed_image)
((gx_device *)bbdev, pis, pmat, pic, prect, pdcolor, pcpath, mem,
pinfo);
@@ -854,6 +860,11 @@
gx_device *pcdev = penum->pcdev;
int pcode = gx_image_end(penum->pixel.info, draw_last);
+ if (pcdev->device_icc_profile) {
+ rc_decrement(pcdev->device_icc_profile, "gx_image3x_end_image");
+ pcdev->device_icc_profile = NULL;
+ }
+
gs_closedevice(pcdev);
if (mdev0)
gs_closedevice(mdev0);
--- ghostscript-9.00/base/gslib.c Tue May 4 11:47:12 2010
+++ ghostscript-9.00/base/gslib.c Mon Oct 8 03:57:33 2012
@@ -178,6 +178,11 @@
ht.spot_function = odsf;
gs_setscreen(pgs, &ht);
}
+
+ code = gsicc_init_device_profile(pgs, dev);
+ if (code < 0)
+ return code;
+
/* gsave and grestore (among other places) assume that */
/* there are at least 2 gstates on the graphics stack. */
/* Ensure that now. */
@@ -197,6 +202,11 @@
dprintf1("**** Test returned code = %d.\n", code);
dputs("Done. Press <enter> to exit.");
fgetc(mem->gs_lib_ctx->fstdin);
+ if (dev->device_icc_profile) {
+ rc_decrement(dev->device_icc_profile, "gslib main");
+ dev->device_icc_profile = NULL;
+ }
+
gs_lib_finit(0, 0, mem);
return 0;
#undef mem
--- ghostscript-9.00/base/gdevvec.c Thu Dec 3 16:33:04 2009
+++ ghostscript-9.00/base/gdevvec.c Mon Oct 8 03:34:56 2012
@@ -326,6 +326,11 @@
dev_proc(vdev, get_initial_matrix));
(*dev_proc(vdev->bbox_device, open_device))
((gx_device *) vdev->bbox_device);
+
+ if (vdev->device_icc_profile) {
+ vdev->bbox_device->device_icc_profile = vdev->device_icc_profile;
+ rc_increment(vdev->bbox_device->device_icc_profile);
+ }
}
return 0;
}
@@ -802,6 +807,11 @@
FILE *f = vdev->file;
int err;
+ if (vdev->bbox_device && vdev->bbox_device->device_icc_profile) {
+ rc_decrement(vdev->bbox_device->device_icc_profile, "gdev_vector_close_file");
+ vdev->bbox_device->device_icc_profile = NULL;
+ }
+
gs_free_object(vdev->v_memory, vdev->bbox_device,
"vector_close(bbox_device)");
vdev->bbox_device = 0;