Feature #11098 » thread-local-update.patch
| gc.c | ||
|---|---|---|
|
#endif
|
||
|
objspace->total_allocated_objects++;
|
||
|
GET_THREAD()->allocated_objects++;
|
||
|
gc_report(5, objspace, "newobj: %s\n", obj_info(obj));
|
||
| test/ruby/test_thread.rb | ||
|---|---|---|
|
c = Class.new(Thread) {def initialize() self.name = "foo"; super; end}
|
||
|
assert_equal("foo", c.new {Thread.current.name}.value)
|
||
|
end
|
||
|
def test_thread_allocated_objects
|
||
|
t = Thread.new do
|
||
|
1000.times do
|
||
|
Object.new
|
||
|
end
|
||
|
end
|
||
|
t.join
|
||
|
assert_equal 1001, t.allocated_objects
|
||
|
end
|
||
|
end
|
||
| thread.c | ||
|---|---|---|
|
return group;
|
||
|
}
|
||
|
VALUE
|
||
|
rb_thread_allocated_objects(VALUE thread)
|
||
|
{
|
||
|
rb_thread_t *th;
|
||
|
GetThreadPtr(thread, th);
|
||
|
return LONG2NUM(th->allocated_objects);
|
||
|
}
|
||
|
static const char *
|
||
|
thread_status_name(rb_thread_t *th)
|
||
|
{
|
||
| ... | ... | |
|
rb_define_method(rb_cThread, "abort_on_exception=", rb_thread_abort_exc_set, 1);
|
||
|
rb_define_method(rb_cThread, "safe_level", rb_thread_safe_level, 0);
|
||
|
rb_define_method(rb_cThread, "group", rb_thread_group, 0);
|
||
|
rb_define_method(rb_cThread, "allocated_objects", rb_thread_allocated_objects, 0);
|
||
|
rb_define_method(rb_cThread, "backtrace", rb_thread_backtrace_m, -1);
|
||
|
rb_define_method(rb_cThread, "backtrace_locations", rb_thread_backtrace_locations_m, -1);
|
||
| vm_core.h | ||
|---|---|---|
|
int safe_level;
|
||
|
int raised_flag;
|
||
|
VALUE last_status; /* $? */
|
||
|
uint64_t allocated_objects;
|
||
|
/* passing state */
|
||
|
int state;
|
||
- « Previous
- 1
- 2
- Next »