pajoye Wed Apr 4 00:44:38 2007 UTC Modified files: /php-src/ext/gd gd.c /php-src/ext/gd/libgd gd.h gdft.c Log: - remove double lock (tween colors cache is created in each thread, the cache mutex is already locked earlier) - #40858, other TS improvements for gd freetype cache management cache initialization and shutdown is now done in MINIT and MSHUTDOWN. http://cvs.php.net/viewvc.cgi/php-src/ext/gd/gd.c?r1=1.366&r2=1.367&diff_format=u Index: php-src/ext/gd/gd.c diff -u php-src/ext/gd/gd.c:1.366 php-src/ext/gd/gd.c:1.367 --- php-src/ext/gd/gd.c:1.366 Sun Feb 11 11:13:40 2007 +++ php-src/ext/gd/gd.c Wed Apr 4 00:44:38 2007 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: gd.c,v 1.366 2007/02/11 11:13:40 pajoye Exp $ */ +/* $Id: gd.c,v 1.367 2007/04/04 00:44:38 pajoye Exp $ */ /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center, Cold Spring Harbor Labs. */ @@ -1078,11 +1078,7 @@ "gd", gd_functions, PHP_MINIT(gd), -#if HAVE_LIBT1 PHP_MSHUTDOWN(gd), -#else - NULL, -#endif NULL, #if HAVE_GD_STRINGFT && (HAVE_GD_FONTCACHESHUTDOWN || HAVE_GD_FREEFONTCACHE) PHP_RSHUTDOWN(gd), @@ -1126,16 +1122,20 @@ } /* }}} */ -#if HAVE_LIBT1 + /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(gd) { +#if HAVE_LIBT1 T1_CloseLib(); +#endif +#if HAVE_GD_FONTMUTEX + gdFontCacheMutexShutdown(); +#endif return SUCCESS; } /* }}} */ -#endif /* {{{ PHP_MINIT_FUNCTION @@ -1144,6 +1144,9 @@ { le_gd = zend_register_list_destructors_ex(php_free_gd_image, NULL, "gd", module_number); le_gd_font = zend_register_list_destructors_ex(php_free_gd_font, NULL, "gd font", module_number); +#if HAVE_GD_FONTMUTEX + gdFontCacheMutexSetup(); +#endif #if HAVE_LIBT1 T1_SetBitmapPad(8); T1_InitLib(NO_LOGFILE | IGNORE_CONFIGFILE | IGNORE_FONTDATABASE); http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gd.h?r1=1.30&r2=1.31&diff_format=u Index: php-src/ext/gd/libgd/gd.h diff -u php-src/ext/gd/libgd/gd.h:1.30 php-src/ext/gd/libgd/gd.h:1.31 --- php-src/ext/gd/libgd/gd.h:1.30 Sat Sep 16 19:08:21 2006 +++ php-src/ext/gd/libgd/gd.h Wed Apr 4 00:44:38 2007 @@ -297,6 +297,14 @@ void gdImageString16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color); void gdImageStringUp16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color); +/* + * The following functions are required to be called prior to the + * use of any sort of threads in a module load / shutdown function + * respectively. + */ +void gdFontCacheMutexSetup(); +void gdFontCacheMutexShutdown(); + /* 2.0.16: for thread-safe use of gdImageStringFT and friends, * call this before allowing any thread to call gdImageStringFT. * Otherwise it is invoked by the first thread to invoke http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gdft.c?r1=1.42&r2=1.43&diff_format=u Index: php-src/ext/gd/libgd/gdft.c diff -u php-src/ext/gd/libgd/gdft.c:1.42 php-src/ext/gd/libgd/gdft.c:1.43 --- php-src/ext/gd/libgd/gdft.c:1.42 Thu Mar 1 18:41:45 2007 +++ php-src/ext/gd/libgd/gdft.c Wed Apr 4 00:44:38 2007 @@ -698,10 +698,8 @@ } 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); } } } @@ -722,7 +720,6 @@ gdCacheDelete(fontCache); fontCache = NULL; gdMutexUnlock(gdFontCacheMutex); - gdMutexShutdown(gdFontCacheMutex); FT_Done_FreeType(library); } } @@ -732,15 +729,23 @@ gdFontCacheShutdown(); } +void gdFontCacheMutexSetup() +{ + gdMutexSetup(gdFontCacheMutex); +} + +void gdFontCacheMutexShutdown() +{ + gdMutexShutdown(gdFontCacheMutex); +} + int gdFontCacheSetup(void) { if (fontCache) { /* Already set up */ return 0; } - gdMutexSetup(gdFontCacheMutex); if (FT_Init_FreeType(&library)) { - gdMutexShutdown(gdFontCacheMutex); return -1; } fontCache = gdCacheCreate (FONTCACHESIZE, fontTest, fontFetch, fontRelease); @@ -803,15 +808,16 @@ /***** initialize font library and font cache on first call ******/ + gdMutexLock(gdFontCacheMutex); if (!fontCache) { if (gdFontCacheSetup() != 0) { gdCacheDelete(tc_cache); + gdMutexUnlock(gdFontCacheMutex); return "Failure to initialize font library"; } } /*****/ - gdMutexLock(gdFontCacheMutex); /* get the font (via font cache) */ fontkey.fontlist = fontlist; fontkey.library = &library;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php