aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-15 18:11:05 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-15 18:11:05 +0000
commitf7ef2f1a77c3bcedbf8679604e82b004a9034747 (patch)
tree8724624d8faa6bbd372f1ef823fa8ae603640a8b
parent9cd0b20620fdf1ff457fca5a140053d0c2c4bbde (diff)
downloadruby-f7ef2f1a77c3bcedbf8679604e82b004a9034747.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--ChangeLog4
-rw-r--r--thread.c13
2 files changed, 11 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index e1ad7b3131..ec52658617 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
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);
}