[前][次][番号順一覧][スレッド一覧]

ruby-changes:64287

From: Koichi <ko1@a...>
Date: Sat, 19 Dec 2020 02:05:36 +0900 (JST)
Subject: [ruby-changes:64287] e76b56f58e (master): support Ruby 2.x for openssl

https://git.ruby-lang.org/ruby.git/commit/?id=e76b56f58e

From e76b56f58e44cb54497d93526d649950f5bdd1c0 Mon Sep 17 00:00:00 2001
From: Koichi Sasada <ko1@a...>
Date: Sat, 19 Dec 2020 02:04:34 +0900
Subject: support Ruby 2.x for openssl


diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c
index 37e619f..ce02efd 100644
--- a/ext/openssl/ossl.c
+++ b/ext/openssl/ossl.c
@@ -497,8 +497,11 @@ print_mem_leaks(VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/openssl/ossl.c#L497
     int ret;
 #endif
 
-    BN_CTX_free(ossl_bn_ctx);
-    ossl_bn_ctx = NULL;
+#ifndef HAVE_RB_EXT_RACTOR_SAFE
+    // for Ruby 2.x
+    void ossl_bn_ctx_free(void); // ossl_bn.c
+    ossl_bn_ctx_free();
+#endif
 
 #if OPENSSL_VERSION_NUMBER >= 0x10100000
     ret = CRYPTO_mem_leaks_fp(stderr);
diff --git a/ext/openssl/ossl_bn.c b/ext/openssl/ossl_bn.c
index ef26e5c..d94b8e3 100644
--- a/ext/openssl/ossl_bn.c
+++ b/ext/openssl/ossl_bn.c
@@ -9,7 +9,10 @@ https://github.com/ruby/ruby/blob/trunk/ext/openssl/ossl_bn.c#L9
  */
 /* modified by Michal Rokos <m.rokos@s...> */
 #include "ossl.h"
+
+#if HAVE_RB_EXT_RACTOR_SAFE
 #include <ruby/ractor.h>
+#endif
 
 #define NewBN(klass) \
   TypedData_Wrap_Struct((klass), &ossl_bn_type, 0)
@@ -152,6 +155,7 @@ ossl_bn_value_ptr(volatile VALUE *ptr) https://github.com/ruby/ruby/blob/trunk/ext/openssl/ossl_bn.c#L155
  * Private
  */
 
+#if HAVE_RB_EXT_RACTOR_SAFE
 void
 ossl_bn_ctx_free(void *ptr)
 {
@@ -180,6 +184,28 @@ ossl_bn_ctx_get(void) https://github.com/ruby/ruby/blob/trunk/ext/openssl/ossl_bn.c#L184
     }
     return ctx;
 }
+#else
+// for ruby 2.x
+static BN_CTX *gv_ossl_bn_ctx;
+
+BN_CTX *
+ossl_bn_ctx_get(void)
+{
+    if (gv_ossl_bn_ctx == NULL) {
+        if (!(gv_ossl_bn_ctx = BN_CTX_new())) {
+            ossl_raise(rb_eRuntimeError, "Cannot init BN_CTX");
+        }
+    }
+    return gv_ossl_bn_ctx;
+}
+
+void
+ossl_bn_ctx_free(void)
+{
+    BN_CTX_free(gv_ossl_bn_ctx);
+    gv_ossl_bn_ctx = NULL;
+}
+#endif
 
 static VALUE
 ossl_bn_alloc(VALUE klass)
@@ -1116,7 +1142,11 @@ Init_ossl_bn(void) https://github.com/ruby/ruby/blob/trunk/ext/openssl/ossl_bn.c#L1142
     eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError);
 #endif
 
+#ifdef HAVE_RB_EXT_RACTOR_SAFE
     ossl_bn_ctx_key = rb_ractor_local_storage_ptr_newkey(&ossl_bn_ctx_key_type);
+#else
+    ossl_bn_ctx_get();
+#endif
 
     eBNError = rb_define_class_under(mOSSL, "BNError", eOSSLError);
 
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]