diff --git a/src/modules/Image/blit.c b/src/modules/Image/blit.c index 91978a07f7aaa12b3d312609727b87acf9611230..3f65671f9923093cf1fa3ccc1c1b20d2ce7370ab 100644 --- a/src/modules/Image/blit.c +++ b/src/modules/Image/blit.c @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: blit.c,v 1.54 2002/10/21 17:06:13 marcus Exp $ +|| $Id: blit.c,v 1.55 2003/03/31 14:40:57 grubba Exp $ */ #include "global.h" @@ -160,28 +160,32 @@ void img_box_nocheck(INT32 x1,INT32 y1,INT32 x2,INT32 y2) foo=this->img+x1+y1*this->xsize; end=this->img+x2+y2*this->xsize+1; - THREADS_ALLOW(); - do { - if(!this->alpha) - { - if(!mod) - img_clear(foo,rgb,end-foo); - else { + if(!this->alpha) + { + if(!mod) + img_clear(foo,rgb,end-foo); + else { + THREADS_ALLOW(); + do { int length = x2-x1+1, xs=this->xsize, y=y2-y1+1; rgb_group *from = foo; if(!length) break; /* Break to the while(0). */ for(x=0; x<length; x++) *(foo+x) = rgb; while(--y) MEMCPY((foo+=xs), from, length*sizeof(rgb_group)); - } - } - else - { + } while(0); + THREADS_DISALLOW(); + } + } + else + { + THREADS_ALLOW(); + do { for (; foo<=end; foo+=mod) for (x=x1; x<=x2; x++,foo++) set_rgb_group_alpha(*foo,rgb,this->alpha); - } - } while(0); - THREADS_DISALLOW(); + } while(0); + THREADS_DISALLOW(); + } }