Created
May 7, 2024 22:39
-
-
Save headius/db73cb12296299a819b8fea17fb165e5 to your computer and use it in GitHub Desktop.
Fix for jruby/jruby#8178 by only allowing a RubyArray into Argv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/core/src/main/java/org/jruby/embed/variable/AbstractVariable.java b/core/src/main/java/org/jruby/embed/variable/AbstractVariable.java | |
index 46177487d7..3c5f9cb821 100644 | |
--- a/core/src/main/java/org/jruby/embed/variable/AbstractVariable.java | |
+++ b/core/src/main/java/org/jruby/embed/variable/AbstractVariable.java | |
@@ -94,7 +94,7 @@ abstract class AbstractVariable implements BiVariable { | |
return (RubyObject) receiver.getRuntime().getTopSelf(); | |
} | |
- protected void updateByJavaObject(final Ruby runtime, Object... values) { | |
+ protected synchronized void updateByJavaObject(final Ruby runtime, Object... values) { | |
assert values != null; | |
javaObject = values[0]; | |
if (javaObject == null) { | |
@@ -108,7 +108,7 @@ abstract class AbstractVariable implements BiVariable { | |
fromRuby = false; | |
} | |
- protected void updateRubyObject(final IRubyObject rubyObject) { | |
+ protected synchronized void updateRubyObject(final IRubyObject rubyObject) { | |
if ( rubyObject == null ) return; | |
this.rubyObject = rubyObject; | |
this.javaType = null; | |
@@ -134,7 +134,7 @@ abstract class AbstractVariable implements BiVariable { | |
return name; | |
} | |
- public Object getJavaObject() { | |
+ public synchronized Object getJavaObject() { | |
if (rubyObject == null) return javaObject; | |
if (javaType != null) { // Java originated variables | |
diff --git a/core/src/main/java/org/jruby/embed/variable/Argv.java b/core/src/main/java/org/jruby/embed/variable/Argv.java | |
index ad8559f10c..0040990cbb 100644 | |
--- a/core/src/main/java/org/jruby/embed/variable/Argv.java | |
+++ b/core/src/main/java/org/jruby/embed/variable/Argv.java | |
@@ -114,7 +114,7 @@ public class Argv extends AbstractVariable { | |
* invoked during EvalUnit#run() is executed. | |
*/ | |
@Override | |
- public void inject() { | |
+ public synchronized void inject() { | |
final Ruby runtime = getRuntime(); | |
final RubyArray argv = RubyArray.newArray(runtime); | |
@@ -141,7 +141,7 @@ public class Argv extends AbstractVariable { | |
* this variable in top self. | |
*/ | |
@Override | |
- public void remove() { | |
+ public synchronized void remove() { | |
this.javaObject = new ArrayList(); | |
inject(); | |
} | |
@@ -173,7 +173,7 @@ public class Argv extends AbstractVariable { | |
} | |
// ARGV appears to require special treatment, leaving javaType intact | |
- protected void updateRubyObject(final IRubyObject rubyObject) { | |
+ protected synchronized void updateRubyObject(final IRubyObject rubyObject) { | |
if ( rubyObject == null ) return; | |
this.rubyObject = rubyObject; | |
} | |
@@ -193,7 +193,7 @@ public class Argv extends AbstractVariable { | |
@Override | |
@SuppressWarnings("unchecked") | |
- public Object getJavaObject() { | |
+ public synchronized Object getJavaObject() { | |
if ( rubyObject == null || ! fromRuby ) return javaObject; | |
final RubyArray ary = (RubyArray) rubyObject; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment