]> granicus.if.org Git - php/commitdiff
MFH: fix #40578 (imagettftext() multithreading issue)
authorAntony Dovgal <tony2001@php.net>
Wed, 21 Feb 2007 18:41:23 +0000 (18:41 +0000)
committerAntony Dovgal <tony2001@php.net>
Wed, 21 Feb 2007 18:41:23 +0000 (18:41 +0000)
NEWS
ext/gd/libgd/gdft.c

diff --git a/NEWS b/NEWS
index a25c4c557461928ea49f91b078f40ab2bc02659c..99f9b29f96092d8a321415d6760c136ef8b50d45 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ PHP 4                                                                      NEWS
 ?? ??? 2007, Version 4.4.6
 - Updated PCRE to version 7.0. (Nuno)
 - Fixed segfault in ext/session when register_globals=On. (Tony)
+- Fixed bug #40578 (imagettftext() multithreading issue). (Tony)
 - Fixed bug #40502 (ext/interbase compile failure). (Tony)
 - Fixed bug #40286 (PHP fastcgi with PHP_FCGI_CHILDREN don't kill children when
   parent is killed). (Dmitry)
index ccf1a91f5d1b892de48c81ef495662399763d212..f38c8f291aa05850053faf7f2e64718b58812e2c 100644 (file)
@@ -196,6 +196,16 @@ tweencolorkey_t;
 #include "jisx0208.h"
 #endif
 
+extern int any2eucjp (char *, char *, unsigned int);
+
+/* Persistent font cache until explicitly cleared */
+/* Fonts can be used across multiple images */
+
+/* 2.0.16: thread safety (the font cache is shared) */
+gdMutexDeclare(gdFontCacheMutex);
+static gdCache_head_t *fontCache = NULL;
+static FT_Library library;
+
 #define Tcl_UniChar int
 #define TCL_UTF_MAX 3
 static int
@@ -740,9 +750,10 @@ gdft_draw_bitmap (gdCache_head_t *tc_cache, gdImage * im, int fg, FT_Bitmap bitm
                  /* find antialised color */
        
                  tc_key.bgcolor = *pixel;
-                 tc_elem = (tweencolor_t *) gdCacheGet (
-                                                         tc_cache, &tc_key);
+                 gdMutexLock(gdFontCacheMutex);
+                 tc_elem = (tweencolor_t *) gdCacheGet (tc_cache, &tc_key);
                  *pixel = tc_elem->tweencolor;
+                 gdMutexUnlock(gdFontCacheMutex);
                }
            }
        }
@@ -758,16 +769,6 @@ gdroundupdown (FT_F26Dot6 v1, int updown)
     : (v1 > 0 ? ((v1 + 63) >> 6) : v1 >> 6);
 }
 
-extern int any2eucjp (char *, char *, unsigned int);
-
-/* Persistent font cache until explicitly cleared */
-/* Fonts can be used across multiple images */
-/* 2.0.16: thread safety (the font cache is shared) */
-gdMutexDeclare(gdFontCacheMutex);
-static gdCache_head_t *fontCache = NULL;
-static FT_Library library;
-
 void gdFontCacheShutdown()
 {
        if (fontCache) {