From a157c85a7f1e6e11399c682218a60ebcdd093686 Mon Sep 17 00:00:00 2001 From: yugui Date: Fri, 16 Mar 2012 05:45:39 +0000 Subject: [PATCH] * load.c (ruby_init_ext): don't free the given pointer itself. It is not guaranteed even that the pointer is on heap. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35058 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ load.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b882a899a4..782cdfbb3b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Mar 16 14:43:18 2012 Yuki Sonoda (Yugui) + + * load.c (ruby_init_ext): don't free the given pointer itself. + It is not guaranteed even that the pointer is on heap. + Fri Mar 16 14:37:57 2012 Shugo Maeda * vm_eval.c (rb_mod_module_eval): fix the documentation of diff --git a/load.c b/load.c index 18651dd3a2..a320c51fc4 100644 --- a/load.c +++ b/load.c @@ -681,11 +681,12 @@ init_ext_call(VALUE arg) RUBY_FUNC_EXPORTED void ruby_init_ext(const char *name, void (*init)(void)) { - if (load_lock(name)) { + char* const lock_key = load_lock(name); + if (lock_key) { rb_vm_call_cfunc(rb_vm_top_self(), init_ext_call, (VALUE)init, 0, rb_str_new2(name)); rb_provide(name); - load_unlock(name, 1); + load_unlock(lock_key, 1); } }