[jboss-modules/f17] Patch to fix MODULES-128
Marek Goldmann
goldmann at fedoraproject.org
Mon Mar 5 17:31:04 UTC 2012
commit 7417aad9aa098c0ed7603779ccf0860300b467f6
Author: Marek Goldmann <goldmann at fedoraproject.org>
Date: Mon Mar 5 18:30:24 2012 +0100
Patch to fix MODULES-128
MODULES-128.patch | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++
jboss-modules.spec | 10 ++++-
2 files changed, 124 insertions(+), 1 deletions(-)
---
diff --git a/MODULES-128.patch b/MODULES-128.patch
new file mode 100644
index 0000000..d05e2ff
--- /dev/null
+++ b/MODULES-128.patch
@@ -0,0 +1,115 @@
+From 958483dfe574e679f4a4e7eb0045e92006156c14 Mon Sep 17 00:00:00 2001
+From: "David M. Lloyd" <david.lloyd at redhat.com>
+Date: Mon, 5 Mar 2012 10:59:42 -0600
+Subject: [PATCH] MODULES-128 - restore original linkage when linking fails,
+ and wake up waiters
+
+---
+ src/main/java/org/jboss/modules/Module.java | 62 ++++++++++++++++++++-------
+ 1 files changed, 46 insertions(+), 16 deletions(-)
+
+diff --git a/src/main/java/org/jboss/modules/Module.java b/src/main/java/org/jboss/modules/Module.java
+index 26cf82c..f1daec2 100644
+--- a/src/main/java/org/jboss/modules/Module.java
++++ b/src/main/java/org/jboss/modules/Module.java
+@@ -1125,32 +1125,47 @@ long addExportedPaths(Dependency[] dependencies, Map<String, List<LocalLoader>>
+ }
+
+ Map<String, List<LocalLoader>> getPaths(final boolean exports) throws ModuleLoadException {
+- Linkage linkage = this.linkage;
+- Linkage.State state = linkage.getState();
++ Linkage oldLinkage = this.linkage;
++ Linkage linkage;
++ Linkage.State state = oldLinkage.getState();
+ if (state == Linkage.State.LINKED) {
+- return linkage.getPaths(exports);
++ return oldLinkage.getPaths(exports);
+ }
+ // slow path loop
+ boolean intr = false;
+ try {
+ for (;;) {
+ synchronized (this) {
+- linkage = this.linkage;
+- state = linkage.getState();
++ oldLinkage = this.linkage;
++ state = oldLinkage.getState();
+ while (state == Linkage.State.LINKING || state == Linkage.State.NEW) try {
+ wait();
+- linkage = this.linkage;
+- state = linkage.getState();
++ oldLinkage = this.linkage;
++ state = oldLinkage.getState();
+ } catch (InterruptedException e) {
+ intr = true;
+ }
+ if (state == Linkage.State.LINKED) {
+- return linkage.getPaths(exports);
++ return oldLinkage.getPaths(exports);
+ }
+- this.linkage = linkage = new Linkage(linkage.getSourceList(), Linkage.State.LINKING);
++ this.linkage = linkage = new Linkage(oldLinkage.getSourceList(), Linkage.State.LINKING);
+ // fall out and link
+ }
+- link(linkage);
++ boolean ok = false;
++ try {
++ link(linkage);
++ ok = true;
++ } finally {
++ if (! ok) {
++ // restore original (lack of) linkage
++ synchronized (this) {
++ if (this.linkage == linkage) {
++ this.linkage = oldLinkage;
++ notifyAll();
++ }
++ }
++ }
++ }
+ }
+ } finally {
+ if (intr) {
+@@ -1193,18 +1208,33 @@ void link(final Linkage linkage) throws ModuleLoadException {
+ }
+
+ void relinkIfNecessary() throws ModuleLoadException {
+- Linkage linkage = this.linkage;
+- if (linkage.getState() != Linkage.State.UNLINKED) {
++ Linkage oldLinkage = this.linkage;
++ Linkage linkage;
++ if (oldLinkage.getState() != Linkage.State.UNLINKED) {
+ return;
+ }
+ synchronized (this) {
+- linkage = this.linkage;
+- if (linkage.getState() != Linkage.State.UNLINKED) {
++ oldLinkage = this.linkage;
++ if (oldLinkage.getState() != Linkage.State.UNLINKED) {
+ return;
+ }
+- this.linkage = linkage = new Linkage(linkage.getSourceList(), Linkage.State.LINKING);
++ this.linkage = linkage = new Linkage(oldLinkage.getSourceList(), Linkage.State.LINKING);
++ }
++ boolean ok = false;
++ try {
++ link(linkage);
++ ok = true;
++ } finally {
++ if (! ok) {
++ // restore original (lack of) linkage
++ synchronized (this) {
++ if (this.linkage == linkage) {
++ this.linkage = oldLinkage;
++ notifyAll();
++ }
++ }
++ }
+ }
+- link(linkage);
+ }
+
+ void relink() throws ModuleLoadException {
+--
+1.7.5.4
+
diff --git a/jboss-modules.spec b/jboss-modules.spec
index d567ae7..82aaa2e 100644
--- a/jboss-modules.spec
+++ b/jboss-modules.spec
@@ -3,7 +3,7 @@
Name: jboss-modules
Version: 1.1.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: A Modular Classloading System
Group: Development/Libraries
License: LGPLv2+
@@ -13,6 +13,9 @@ URL: https://github.com/jbossas/jboss-modules
# cd jboss-modules/ && git archive --format=tar --prefix=jboss-modules-1.1.1.GA/ 1.1.1.GA | xz > jboss-modules-1.1.1.GA.tar.xz
Source0: %{name}-%{namedversion}.tar.xz
+# Fixes https://issues.jboss.org/browse/MODULES-128
+Patch0: MODULES-128.patch
+
BuildArch: noarch
BuildRequires: jpackage-utils
@@ -48,6 +51,8 @@ This package contains the API documentation for %{name}.
%prep
%setup -q -n %{name}-%{namedversion}
+%patch0 -p1
+
%build
mvn-rpmbuild install javadoc:aggregate
@@ -77,6 +82,9 @@ cp -rp target/site/apidocs/* $RPM_BUILD_ROOT%{_javadocdir}/%{name}
%{_javadocdir}/%{name}
%changelog
+* Mon Mar 05 2012 Marek Goldmann <mgoldman at redhat.com> 1.1.1-3
+- Patch to fix MODULES-128
+
* Thu Feb 23 2012 Marek Goldmann <mgoldman at redhat.com> 1.1.1-2
- Relocated jars to _javadir
More information about the scm-commits
mailing list