From d390603274f15c693816db037067dbf0d1923a5b Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 1 Apr 2015 13:30:38 +1100 Subject: [PATCH] PERF: Fix memory leak We used to leak some memory every time you cook a post see: https://github.com/cowboyd/therubyracer/pull/336 --- .../fix_rubyracer_memory_leak.rb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 lib/freedom_patches/fix_rubyracer_memory_leak.rb diff --git a/lib/freedom_patches/fix_rubyracer_memory_leak.rb b/lib/freedom_patches/fix_rubyracer_memory_leak.rb new file mode 100644 index 00000000000..2971797b840 --- /dev/null +++ b/lib/freedom_patches/fix_rubyracer_memory_leak.rb @@ -0,0 +1,33 @@ +## TODO: DELETE ME WHEN https://github.com/cowboyd/therubyracer/pull/336 +# is upstreamed and released +# +module V8 + module Weak + class WeakValueMap + def initialize + @values = {} + end + + def [](key) + if ref = @values[key] + ref.object + end + end + + def []=(key, value) + ref = V8::Weak::Ref.new(value) + ObjectSpace.define_finalizer(value, self.class.ensure_cleanup(@values, key, ref)) + + @values[key] = ref + end + + private + + def self.ensure_cleanup(values,key,ref) + proc { + values.delete(key) if values[key] == ref + } + end + end + end +end