#40858 [Asn]: Thread safety issue in GD
| From: | pajoye@php.net | Date: | Mon, 19 Mar 2007 19:22:00 +0000 |
| Subject: | #40858 [Asn]: Thread safety issue in GD | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-110518@lists.php.net to get a copy of this message | ||
ID: 40858
Updated by: pajoye@php.net
Reported By: scottmacvicar at ntlworld dot com
Status: Assigned
Bug Type: GD related
Operating System: RHEL 4
PHP Version: 5.2.1
Assigned To: pajoye
New Comment:
Yes, we noticed the cacheSetup problem too. One solution is to
initialize it in MINIT and destroy it in MSHUTDOWN. I'm working on patch
to implement this solution.
The first problem looks weird. It defeats the whole purpose of the
mutex. I do not have the time now to test. I will give it a try later
this week.
Previous Comments:
------------------------------------------------------------------------
[2007-03-19 19:13:02] scottmacvicar at ntlworld dot com
I should have mentioned, the first patch deals with the segfault so it
errors out gracefully. We've got this running on production now.
The second patch is an attempt to deal with the race condition that's
still present, would probably be simplier to just to call
gdFontCacheSetup() again but I'm unsure what the behaviour is of setting
up a mutex thats already initialised and then locking it.
------------------------------------------------------------------------
[2007-03-19 18:53:45] tony2001@php.net
Assigned to the maintainer.
------------------------------------------------------------------------
[2007-03-19 18:41:15] scottmacvicar at ntlworld dot com
Description:
------------
Appears to be still several more thread safety issues in GD, I've not
had time to track these all down yet.
We're running gdft.c from CVS to fix a few identified issues already.
Looking at the code there still appears to be a race condition within
the code but it appears to be a pretty tight loop since its not
happening as often as before.
By looking at gdft.c it looks possible for a fontCache entry to exist
during a check, by the time it gets to obtaining the lock the fontCache
has been cleared or something similarly evil.
The backtrace we've got is:
http://public.vbulletin.com/bugs/php/gdcache-bt.txt
Patch for first issue to deal with the possibility that a cache entry
is null: http://public.vbulletin.com/bugs/php/gdcache-patch-1.txt
Potential patch for second issue to deal with gdCacheSetup thread
safety: http://public.vbulletin.com/bugs/php/gdcache-patch-2.txt
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=40858&edit=1