From 5522e010e55a3bdeaed400ffca675e3a8e468257 Mon Sep 17 00:00:00 2001 From: normal Date: Wed, 15 Jul 2015 18:11:05 +0000 Subject: 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 --- thread.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'thread.c') diff --git a/thread.c b/thread.c index f80fcf6bf4..95b022f542 100644 --- a/thread.c +++ b/thread.c @@ -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); } -- cgit v1.2.3