rpms/libxslt/F-11 libxslt-1.1.25-locking.patch, NONE, 1.1 libxslt.spec, 1.58, 1.59
Daniel Veillard
veillard at fedoraproject.org
Mon Sep 21 09:12:56 UTC 2009
- Previous message: rpms/tellico/devel .cvsignore, 1.18, 1.19 sources, 1.18, 1.19 tellico.spec, 1.39, 1.40
- Next message: rpms/libxslt/F-10 libxslt-1.1.25-locking.patch, NONE, 1.1 libxslt.spec, 1.56, 1.57
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: veillard
Update of /cvs/pkgs/rpms/libxslt/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv2092
Modified Files:
libxslt.spec
Added Files:
libxslt-1.1.25-locking.patch
Log Message:
Fix lock problems in 1.1.25, Daniel
libxslt-1.1.25-locking.patch:
extensions.c | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
--- NEW FILE libxslt-1.1.25-locking.patch ---
commit 2e8defa7ccef2f76fb1cbfe9e9673d8e4b6cf1d6
Author: Daniel Veillard <veillard at redhat.com>
Date: Sun Sep 20 11:51:52 2009 +0200
595612 Try to fix some locking problems
* libxslt/extensions.c: there were still cases where the normal
code path could led to trying to mtake again the extension lock
go over all entry points of the module and clean things up
diff --git a/libxslt/extensions.c b/libxslt/extensions.c
index ebb81f5..6187b7a 100644
--- a/libxslt/extensions.c
+++ b/libxslt/extensions.c
@@ -313,8 +313,6 @@ typedef void (*exsltRegisterFunction) (void);
* by LIBXSLT_DEFAULT_PLUGINS_PATH() which is determined at
* compile time.
*
- * Always called with xsltExtMutex lock taken.
- *
* Returns 0 if successful, -1 in case of error.
*/
@@ -550,10 +548,14 @@ xsltRegisterExtPrefix(xsltStylesheetPtr style,
if (xsltExtensionsHash != NULL) {
xsltExtModulePtr module;
+ xmlMutexLock(xsltExtMutex);
module = xmlHashLookup(xsltExtensionsHash, URI);
+ xmlMutexUnlock(xsltExtMutex);
if (NULL == module) {
if (!xsltExtModuleRegisterDynamic(URI)) {
+ xmlMutexLock(xsltExtMutex);
module = xmlHashLookup(xsltExtensionsHash, URI);
+ xmlMutexUnlock(xsltExtMutex);
}
}
if (module != NULL) {
@@ -1669,18 +1671,13 @@ xsltExtElementLookup(xsltTransformContextPtr ctxt,
if ((name == NULL) || (URI == NULL))
return (NULL);
- xmlMutexLock(xsltExtMutex);
-
if ((ctxt != NULL) && (ctxt->extElements != NULL)) {
XML_CAST_FPTR(ret) = xmlHashLookup2(ctxt->extElements, name, URI);
if (ret != NULL) {
- xmlMutexUnlock(xsltExtMutex);
return(ret);
}
}
- xmlMutexUnlock(xsltExtMutex);
-
ret = xsltExtModuleElementLookup(name, URI);
return (ret);
@@ -1707,19 +1704,23 @@ xsltExtModuleElementLookup(const xmlChar * name, const xmlChar * URI)
ext = (xsltExtElementPtr) xmlHashLookup2(xsltElementsHash, name, URI);
+ xmlMutexUnlock(xsltExtMutex);
+
/*
* if function lookup fails, attempt a dynamic load on
* supported platforms
*/
if (NULL == ext) {
if (!xsltExtModuleRegisterDynamic(URI)) {
+ xmlMutexLock(xsltExtMutex);
+
ext = (xsltExtElementPtr)
xmlHashLookup2(xsltElementsHash, name, URI);
+
+ xmlMutexUnlock(xsltExtMutex);
}
}
- xmlMutexUnlock(xsltExtMutex);
-
if (ext == NULL)
return (NULL);
return (ext->transform);
@@ -1747,13 +1748,18 @@ xsltExtModuleElementPreComputeLookup(const xmlChar * name,
ext = (xsltExtElementPtr) xmlHashLookup2(xsltElementsHash, name, URI);
+ xmlMutexUnlock(xsltExtMutex);
+
if (ext == NULL) {
if (!xsltExtModuleRegisterDynamic(URI)) {
+ xmlMutexLock(xsltExtMutex);
+
ext = (xsltExtElementPtr)
xmlHashLookup2(xsltElementsHash, name, URI);
+
+ xmlMutexUnlock(xsltExtMutex);
}
}
- xmlMutexUnlock(xsltExtMutex);
if (ext == NULL)
return (NULL);
@@ -1856,15 +1862,19 @@ xsltExtModuleTopLevelLookup(const xmlChar * name, const xmlChar * URI)
XML_CAST_FPTR(ret) = xmlHashLookup2(xsltTopLevelsHash, name, URI);
+ xmlMutexUnlock(xsltExtMutex);
+
/* if lookup fails, attempt a dynamic load on supported platforms */
if (NULL == ret) {
if (!xsltExtModuleRegisterDynamic(URI)) {
+ xmlMutexLock(xsltExtMutex);
+
XML_CAST_FPTR(ret) = xmlHashLookup2(xsltTopLevelsHash, name, URI);
+
+ xmlMutexUnlock(xsltExtMutex);
}
}
- xmlMutexUnlock(xsltExtMutex);
-
return (ret);
}
Index: libxslt.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libxslt/F-11/libxslt.spec,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -p -r1.58 -r1.59
--- libxslt.spec 17 Sep 2009 16:09:20 -0000 1.58
+++ libxslt.spec 21 Sep 2009 09:12:56 -0000 1.59
@@ -1,7 +1,7 @@
Summary: Library providing the Gnome XSLT engine
Name: libxslt
Version: 1.1.25
-Release: 1%{?dist}%{?extra_release}
+Release: 2%{?dist}%{?extra_release}
License: MIT
Group: Development/Libraries
Source: ftp://xmlsoft.org/XSLT/libxslt-%{version}.tar.gz
@@ -15,6 +15,7 @@ BuildRequires: libgcrypt-devel
Prefix: %{_prefix}
Docdir: %{_docdir}
Patch0: multilib.patch
+Patch1: libxslt-1.1.25-locking.patch
%description
This C library allows to transform XML files into other XML files
@@ -56,6 +57,7 @@ with XPath functions written in Python.
%prep
%setup -q
%patch0 -p1
+%patch1 -p1
%build
%configure
@@ -130,6 +132,9 @@ rm -fr %{buildroot}
%doc python/tests/*.xsl
%changelog
+* Mon Sep 21 2009 Daniel Veillard <veillard at redhat.com> 1.1.25-2
+- fix a locking bug in 1.1.25
+
* Thu Sep 17 2009 Daniel Veillard <veillard at redhat.com> 1.1.25-1
- release of 1.1.25
- Add API versioning for libxslt shared library
- Previous message: rpms/tellico/devel .cvsignore, 1.18, 1.19 sources, 1.18, 1.19 tellico.spec, 1.39, 1.40
- Next message: rpms/libxslt/F-10 libxslt-1.1.25-locking.patch, NONE, 1.1 libxslt.spec, 1.56, 1.57
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the scm-commits
mailing list