diff options
author | Koichi Sasada <ko1@atdot.net> | 2020-12-19 02:04:34 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-02-14 21:46:47 +0900 |
commit | f2db943e8f19d4fa7bf871b9914dd9b92a5fbe6f (patch) | |
tree | 2d2e3d3d3970a956b9befaf17f8b4947cf8304f0 /ext/openssl/ossl_bn.c | |
parent | 9e7cf9e930cb986a04e312cb576814254dff13be (diff) | |
download | ruby-openssl-f2db943e8f19d4fa7bf871b9914dd9b92a5fbe6f.tar.gz |
support Ruby 2.x for openssl
ruby/ruby@e76b56f58e44cb54497d93526d649950f5bdd1c0
Diffstat (limited to 'ext/openssl/ossl_bn.c')
-rw-r--r-- | ext/openssl/ossl_bn.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/ext/openssl/ossl_bn.c b/ext/openssl/ossl_bn.c index ef26e5ce..d94b8e37 100644 --- a/ext/openssl/ossl_bn.c +++ b/ext/openssl/ossl_bn.c @@ -9,7 +9,10 @@ */ /* modified by Michal Rokos <m.rokos@sh.cvut.cz> */ #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) * Private */ +#if HAVE_RB_EXT_RACTOR_SAFE void ossl_bn_ctx_free(void *ptr) { @@ -180,6 +184,28 @@ ossl_bn_ctx_get(void) } 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) 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); |