[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