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/