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

diff --git a/NEWS b/NEWS
index 61b90265a58be7dfeb2b8200cd4f87bb06cb9b6e..1a18c5365f77d930e4391c2dfb2a69a5fb236fca 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ PHP                                                                        NEWS
 - Added --ri switch to CLI which allows to check extension information. (Marcus)
 - Added tidyNode::getParent() method (John, Nuno)
 - Fixed zend_llist_remove_tail (Michael Wallner, Dmitry)
+- Fixed bug #40578 (imagettftext() multithreading issue). (Tony)
 - Fixed bug #40576 (double values are truncated to 6 decimal digits when 
   encoding). (Tony)
 - Fixed bug #40560 (DIR functions do not work on root UNC path). (Dmitry)
index 30ac2768c94df7b2be7d0cabaab3de2db8ee9735..bf5bd04d12e6b56a2868de6f3304013ece09daa2 100644 (file)
@@ -192,6 +192,16 @@ typedef struct
 #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 gdTcl_UtfToUniChar (char *str, Tcl_UniChar * chPtr)
@@ -688,8 +698,10 @@ static char * gdft_draw_bitmap (gdCache_head_t *tc_cache, gdImage * im, int fg,
                                } else {
                                        /* find antialised color */
                                        tc_key.bgcolor = *pixel;
+                                       gdMutexLock(gdFontCacheMutex);
                                        tc_elem = (tweencolor_t *) gdCacheGet(tc_cache, &tc_key);
                                        *pixel = tc_elem->tweencolor;
+                                       gdMutexUnlock(gdFontCacheMutex);
                                }
                        }
                }
@@ -703,16 +715,6 @@ gdroundupdown (FT_F26Dot6 v1, int updown)
        return (!updown) ? (v1 < 0 ? ((v1 - 63) >> 6) : v1 >> 6) : (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) {