Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Jul 2023 15:10:24 GMT
From:      Dirk Meyer <dinoex@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 7311c841f51f - main - graphics/gd: add option to change timing of gdFontCacheMutex setup and shutdown
Message-ID:  <202307011510.361FAO1o047418@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by dinoex:

URL: https://cgit.FreeBSD.org/ports/commit/?id=7311c841f51fa73d3f380e2f4b270044e94a3b91

commit 7311c841f51fa73d3f380e2f4b270044e94a3b91
Author:     Dirk Meyer <dinoex@FreeBSD.org>
AuthorDate: 2023-07-01 15:10:04 +0000
Commit:     Dirk Meyer <dinoex@FreeBSD.org>
CommitDate: 2023-07-01 15:10:04 +0000

    graphics/gd: add option to change timing of gdFontCacheMutex setup and shutdown
    
    PR: 272091
---
 graphics/gd/Makefile                  |   4 +-
 graphics/gd/files/extra-patch-threads | 154 ++++++++++++++++++++++++++++++++++
 2 files changed, 157 insertions(+), 1 deletion(-)

diff --git a/graphics/gd/Makefile b/graphics/gd/Makefile
index 5aa0c8d80e74..686796921c90 100644
--- a/graphics/gd/Makefile
+++ b/graphics/gd/Makefile
@@ -24,7 +24,7 @@ SUB_FILES=	gdlib-config
 USE_LDCONFIG=	yes
 TEST_TARGET=	check
 
-OPTIONS_DEFINE=	PNG JPEG WEBP TIFF XPM HEIF AVIF LIQ FREETYPE FONTCONFIG RAQM ICONV
+OPTIONS_DEFINE=	PNG JPEG WEBP TIFF XPM HEIF AVIF LIQ FREETYPE FONTCONFIG RAQM ICONV THREADS
 OPTIONS_DEFAULT=PNG JPEG WEBP TIFF FREETYPE FONTCONFIG ICONV
 NO_OPTIONS_SORT=yes
 OPTIONS_SUB=	yes
@@ -68,6 +68,8 @@ XPM_CONFIGURE_ON=	--with-x
 XPM_CONFIGURE_OFF=	--with-xpm=no
 ICONV_USES=	iconv
 ICONV_CONFIGURE_ON=	${ICONV_CONFIGURE_ARG}
+THREADS_EXTRA_PATCHES=	${PATCHDIR}/extra-patch-threads
+THREADS_USES=		autoreconf
 
 .include <bsd.port.options.mk>
 
diff --git a/graphics/gd/files/extra-patch-threads b/graphics/gd/files/extra-patch-threads
new file mode 100644
index 000000000000..d09a69ea46de
--- /dev/null
+++ b/graphics/gd/files/extra-patch-threads
@@ -0,0 +1,154 @@
+--- configure.ac.orig	2021-09-11 04:43:11 UTC
++++ configure.ac
+@@ -101,6 +101,8 @@ AC_CHECK_FUNC(sin,,[AC_CHECK_LIB(m,sin)])
+ AX_PTHREAD()
+ AX_OPENMP()
+ 
++AM_CONDITIONAL([HAVE_PTHREAD], [test "x$ax_pthread_ok" = "xyes"])
++
+ dnl We should default this to off in future releases.
+ AC_MSG_CHECKING([whether to support gd image formats])
+ AC_ARG_ENABLE([gd-formats],
+--- src/Makefile.am.orig	2021-09-11 04:43:11 UTC
++++ src/Makefile.am
+@@ -129,4 +129,9 @@ libgd_la_LDFLAGS = -version-info $(GDLIB_LT_CURRENT):$
+ 
+ libgd_la_LIBADD = $(LTLIBICONV)
+ 
++if HAVE_PTHREAD
++libgd_la_SOURCES += \
++	gdinitfini.c
++endif
++
+ LDADD = libgd.la $(LIBICONV)
+--- src/gdft.c.orig	2021-09-11 04:43:11 UTC
++++ src/gdft.c
+@@ -890,7 +890,17 @@ BGD_DECLARE(void) gdFreeFontCache ()
+  */
+ BGD_DECLARE(void) gdFontCacheShutdown ()
+ {
++#if defined(HAVE_PTHREAD)
++	/* referring to bundled with php */
++	gdMutexLock(gdFontCacheMutex);
+ 	if (fontCache) {
++		gdCacheDelete(fontCache);
++		fontCache = NULL;
++		FT_Done_FreeType(library);
++	}
++	gdMutexUnlock(gdFontCacheMutex);
++#else
++	if (fontCache) {
+ 		gdMutexLock(gdFontCacheMutex);
+ 		gdCacheDelete (fontCache);
+ 		/* 2.0.16: Gustavo Scotti: make sure we don't free this twice */
+@@ -899,6 +909,7 @@ BGD_DECLARE(void) gdFontCacheShutdown ()
+ 		gdMutexShutdown (gdFontCacheMutex);
+ 		FT_Done_FreeType (library);
+ 	}
++#endif
+ }
+ 
+ /**
+@@ -948,11 +959,18 @@ BGD_DECLARE(int) gdFontCacheSetup (void)
+ 		/* Already set up */
+ 		return 0;
+ 	}
++#if defined(HAVE_PTHREAD)
++	/* referring to bundled with php */
++	if (FT_Init_FreeType (&library)) {
++		return -1;
++	}
++#else
+ 	gdMutexSetup (gdFontCacheMutex);
+ 	if (FT_Init_FreeType (&library)) {
+ 		gdMutexShutdown (gdFontCacheMutex);
+ 		return -1;
+ 	}
++#endif
+ 	fontCache = gdCacheCreate (FONTCACHESIZE, fontTest, fontFetch, fontRelease);
+ 	if (!fontCache) {
+ 		return -2;
+@@ -1144,6 +1162,10 @@ BGD_DECLARE(char *) gdImageStringFTEx (gdImagePtr im, 
+ 	                          tweenColorRelease);
+ 
+ 	/***** initialize font library and font cache on first call ******/
++#if defined(HAVE_PTHREAD)
++	/* referring to bundled with php */
++	gdMutexLock(gdFontCacheMutex);
++#endif
+ 	if (!fontCache) {
+ 		if (gdFontCacheSetup () != 0) {
+ 			gdCacheDelete (tc_cache);
+@@ -1151,7 +1173,11 @@ BGD_DECLARE(char *) gdImageStringFTEx (gdImagePtr im, 
+ 		}
+ 	}
+ 	/*****/
++#if defined(HAVE_PTHREAD)
++	/* referring to bundled with php */
++#else
+ 	gdMutexLock (gdFontCacheMutex);
++#endif
+ 	/* get the font (via font cache) */
+ 	fontkey.fontlist = fontlist;
+ 	if (strex)
+--- src/gdhelpers.h.orig	2021-09-11 04:43:11 UTC
++++ src/gdhelpers.h
+@@ -51,11 +51,22 @@ extern "C" {
+ # define gdMutexUnlock(x) LeaveCriticalSection(&x)
+ #elif defined(HAVE_PTHREAD)
+ # include <pthread.h>
++# include "gd_errors.h"
+ # define gdMutexDeclare(x) pthread_mutex_t x
+ # define gdMutexSetup(x) pthread_mutex_init(&x, 0)
+ # define gdMutexShutdown(x) pthread_mutex_destroy(&x)
+-# define gdMutexLock(x) pthread_mutex_lock(&x)
+-# define gdMutexUnlock(x) pthread_mutex_unlock(&x)
++# define gdMutexLock(x) do {\
++		int pten = 0;\
++		if ((pten = pthread_mutex_lock(&x)) != 0) {\
++			gd_error_ex(GD_DEBUG, "gdMutexLock(%s<%p>) %s\n", #x, x, strerror(pten));\
++		}\
++	} while (0)
++# define gdMutexUnlock(x) do {\
++		int pten = 0;\
++		if ((pten = pthread_mutex_unlock(&x)) != 0) {\
++			gd_error_ex(GD_DEBUG, "gdMutexUnlock(%s<%p>) %s\n", #x, x, strerror(pten));\
++		}\
++	} while (0)
+ #else
+ # define gdMutexDeclare(x)
+ # define gdMutexSetup(x)
+--- src/gdinitfini.c.orig	1970-01-01 00:00:00 UTC
++++ src/gdinitfini.c
+@@ -0,0 +1,31 @@
++#include <string.h>
++#include "gd.h"
++#include "gd_errors.h"
++#include "gdhelpers.h"
++
++#if defined(CPP_SHARP)
++#elif defined(_WIN32)
++#elif defined(HAVE_PTHREAD)
++
++extern gdMutexDeclare(gdFontCacheMutex);
++
++void
++_init()
++{
++	int pten = 0;
++	if ((pten = gdMutexSetup(gdFontCacheMutex)) != 0) {
++		gd_error_ex(GD_ERROR, "%s gdMutexSetup %s\n", __func__, strerror(pten));
++	}
++}
++
++void
++_fini()
++{
++	int pten = 0;
++	if ((pten = gdMutexShutdown(gdFontCacheMutex)) != 0) {
++		gd_error_ex(GD_ERROR, "%s gdMutexShutdown %s\n", __func__, strerror(pten));
++	}
++}
++
++#else
++#endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202307011510.361FAO1o047418>