From c3b7cb19018b42a595dd30c7da84d81f3196c136 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Wed, 21 Feb 2007 14:59:36 +0000 Subject: [PATCH] fix #40578 (imagettftext() multithreading issue) --- ext/gd/libgd/gdft.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c index 30ac2768c9..bf5bd04d12 100644 --- a/ext/gd/libgd/gdft.c +++ b/ext/gd/libgd/gdft.c @@ -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) { -- 2.50.1