diff --git a/src/main/java/org/jruby/ext/openssl/SSLSocket.java b/src/main/java/org/jruby/ext/openssl/SSLSocket.java index f817d1a3..2b0588b1 100644 --- a/src/main/java/org/jruby/ext/openssl/SSLSocket.java +++ b/src/main/java/org/jruby/ext/openssl/SSLSocket.java @@ -868,7 +868,7 @@ private IRubyObject sysreadImpl(final ThreadContext context, } catch (IOException ex) { debugStackTrace(runtime, "SSLSocket.sysreadImpl", ex); - throw Utils.newError(runtime, runtime.getIOError(), ex); + throw Utils.newError(runtime::newIOErrorFromException, ex); } } @@ -952,7 +952,7 @@ private IRubyObject syswriteImpl(final ThreadContext context, } catch (IOException ex) { debugStackTrace(runtime, "SSLSocket.syswriteImpl", ex); - throw runtime.newIOErrorFromException(ex); + throw Utils.newError(runtime::newIOErrorFromException, ex); } } diff --git a/src/main/java/org/jruby/ext/openssl/Utils.java b/src/main/java/org/jruby/ext/openssl/Utils.java index b1dd4bf4..84a890c6 100644 --- a/src/main/java/org/jruby/ext/openssl/Utils.java +++ b/src/main/java/org/jruby/ext/openssl/Utils.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.HashSet; +import java.util.function.Function; import org.jruby.*; import org.jruby.exceptions.RaiseException; @@ -94,6 +95,12 @@ static RaiseException newError(Ruby runtime, RubyClass errorClass, String msg, T return ex; } + static RaiseException newError(Function errorFunction, T e) { + RaiseException ex = errorFunction.apply(e); + ex.initCause(e); + return ex; + } + // reinvented parts of org.jruby.runtime.Helpers for compatibility with "older" JRuby : static IRubyObject invoke(ThreadContext context, IRubyObject self, String name, Block block) {