summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Johnston <ray.johnston@artifex.com>2013-01-27 14:03:05 -0800
committerChris Liddell <chris.liddell@artifex.com>2013-01-30 14:07:32 +0000
commitab9615d43302f03ce57fdd8e849ec52e870983e4 (patch)
tree641b2d84e5159d079d82518385a57cc27939fe7a
parent62df74b7ef081a9f35028b493843a4624048f7af (diff)
downloadghostpdl-ab9615d43302f03ce57fdd8e849ec52e870983e4.tar.gz
Bug 693590: MT rendering has wrong 'supports_devn' and incomplete color_info
Shadings use the comp_bits, comp_mask and comp_shift which must match the main thread's setting, so we copy the color_info from the clist device. Also the thread's icc_struct->supports_devn must correspond to the main thread's device (regressions with psdcmyk detected this).
-rw-r--r--gs/base/gxclthrd.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gs/base/gxclthrd.c b/gs/base/gxclthrd.c
index 47c0aa1e8..c3880f1da 100644
--- a/gs/base/gxclthrd.c
+++ b/gs/base/gxclthrd.c
@@ -147,6 +147,7 @@ clist_setup_render_threads(gx_device *dev, int y)
ncdev->bandlist_memory = thread->memory;
gs_c_param_list_read(&paramlist);
ndev->PageCount = dev->PageCount; /* copy to prevent mismatch error */
+ ndev->color_info = cdev->color_info; /* copy before putdeviceparams */
#if CMM_THREAD_SAFE
ndev->icc_struct = dev->icc_struct; /* Set before put params */
rc_increment(ndev->icc_struct);
@@ -160,6 +161,8 @@ clist_setup_render_threads(gx_device *dev, int y)
code = devn_copy_params(dev, (gx_device*) ncdev);
if (code < 0) return_error(gs_error_VMerror);
}
+ /* Also make sure supports_devn is set correctly */
+ ndev->icc_struct->supports_devn = cdev->icc_struct->supports_devn;
ncdev->page_uses_transparency = cdev->page_uses_transparency;
if_debug3m(gs_debug_flag_icc, cdev->memory,
"[icc] MT clist device = 0x%x profile = 0x%x handle = 0x%x\n",