From: "KISHIMOTO, Makoto" Date: 2016-12-30T11:04:01+09:00 Subject: [ruby-dev:49934] Re: r57227 の変更ではリークが起きるようです On Thu, 29 Dec 2016 15:47:40 +0900 "KISHIMOTO, Makoto" wrote: > きしもとです > > こちらの件についてですが、原因はこの変更自体ではなく、(GMP)gcdでした。 > もう少し追ってみます。 rational.c の中の gcd_gmp ですが、リークしているように見えます。 diff --git a/rational.c b/rational.c index a78b347..7114020 100644 --- a/rational.c +++ b/rational.c @@ -261,10 +261,15 @@ rb_gcd_gmp(VALUE x, VALUE y) mpz_gcd(mz, mx, my); + mpz_clear(mx); + mpz_clear(my); + zn = (mpz_sizeinbase(mz, 16) + SIZEOF_BDIGIT*2 - 1) / (SIZEOF_BDIGIT*2); z = rb_big_new(zn, 1); mpz_export(BIGNUM_DIGITS(z), &count, -1, sizeof(BDIGIT), 0, nails, mz); + mpz_clear(mz); + return rb_big_norm(z); } #endif