@@ -47,9 +47,9 @@ SEXP L_fill(SEXP path, SEXP rule)
4747 /* Get the current device
4848 */
4949 pGEDevDesc dd = getDevice ();
50- /* currentgp has to be explicitly protected, because resolveGPar()
51- may change "dd" so that currentgp is no longer protected implicitly */
52- PROTECT (currentgp = gridStateElement (dd , GSS_GPAR ));
50+ /* currentgp is a snapshot from grid state that we modify when we
51+ resolve any pattern fill, so duplicate and protect */
52+ PROTECT (currentgp = duplicate ( gridStateElement (dd , GSS_GPAR ) ));
5353 PROTECT (resolvedFill = resolveGPar (currentgp , FALSE));
5454 gcontextFromgpar (currentgp , 0 , & gc , dd );
5555
@@ -79,9 +79,9 @@ SEXP L_fillStroke(SEXP path, SEXP rule)
7979 /* Get the current device
8080 */
8181 pGEDevDesc dd = getDevice ();
82- /* currentgp has to be explicitly protected, because resolveGPar()
83- may change dd so that currentgp is no longer protected implicitly */
84- PROTECT (currentgp = gridStateElement (dd , GSS_GPAR ));
82+ /* currentgp is a snapshot from grid state that we modify when we
83+ resolve any pattern fill, so duplicate and protect */
84+ PROTECT (currentgp = duplicate ( gridStateElement (dd , GSS_GPAR ) ));
8585 PROTECT (resolvedFill = resolveGPar (currentgp , FALSE));
8686 gcontextFromgpar (currentgp , 0 , & gc , dd );
8787
0 commit comments