diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-07-15 18:11:05 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-07-15 18:11:05 +0000 |
commit | 5522e010e55a3bdeaed400ffca675e3a8e468257 (patch) | |
tree | 8724624d8faa6bbd372f1ef823fa8ae603640a8b | |
parent | 66a36e9b13e3e7eee3ecc4f844be72416d1863cf (diff) | |
download | ruby-5522e010e55a3bdeaed400ffca675e3a8e468257.tar.gz |
thread.c (thread_initialize): avoid RSTRING_PTR and NUMT2INT
Favor passing VALUE args as-is and using PRisVALUE in format strings
to prevent premature GC. In this case, we are not fixing any real
bug because location path has other references, but this makes code
easier-to-review.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | thread.c | 13 |
2 files changed, 11 insertions, 6 deletions
@@ -1,3 +1,7 @@ +Thu Jul 16 02:56:14 2015 Eric Wong <e@80x24.org> + + * thread.c (thread_initialize): avoid RSTRING_PTR and NUMT2INT + Thu Jul 16 01:00:46 2015 Naohisa Goto <ngotogenome@gmail.com> * test/ruby/test_process.rb (test_exec_close_reserved_fd): test for @@ -769,17 +769,18 @@ thread_initialize(VALUE thread, VALUE args) GetThreadPtr(thread, th); if (th->first_args) { VALUE proc = th->first_proc, line, loc; - const char *file; + VALUE file; if (!proc || !RTEST(loc = rb_proc_location(proc))) { rb_raise(rb_eThreadError, "already initialized thread"); } - file = RSTRING_PTR(RARRAY_AREF(loc, 0)); + file = RARRAY_AREF(loc, 0); if (NIL_P(line = RARRAY_AREF(loc, 1))) { - rb_raise(rb_eThreadError, "already initialized thread - %s", - file); + rb_raise(rb_eThreadError, + "already initialized thread - %"PRIsVALUE, file); } - rb_raise(rb_eThreadError, "already initialized thread - %s:%d", - file, NUM2INT(line)); + rb_raise(rb_eThreadError, + "already initialized thread - %"PRIsVALUE":%"PRIsVALUE, + file, line); } return thread_create_core(thread, args, 0); } |