diff options
Diffstat (limited to 'ext/-test-/tracepoint')
-rw-r--r-- | ext/-test-/tracepoint/depend | 10 | ||||
-rw-r--r-- | ext/-test-/tracepoint/gc_hook.c | 28 | ||||
-rw-r--r-- | ext/-test-/tracepoint/tracepoint.c | 54 |
3 files changed, 48 insertions, 44 deletions
diff --git a/ext/-test-/tracepoint/depend b/ext/-test-/tracepoint/depend index f05f13d08d..133663b3bd 100644 --- a/ext/-test-/tracepoint/depend +++ b/ext/-test-/tracepoint/depend @@ -14,6 +14,7 @@ gc_hook.o: $(hdrdir)/ruby/backward/2/stdarg.h gc_hook.o: $(hdrdir)/ruby/debug.h gc_hook.o: $(hdrdir)/ruby/defines.h gc_hook.o: $(hdrdir)/ruby/intern.h +gc_hook.o: $(hdrdir)/ruby/internal/abi.h gc_hook.o: $(hdrdir)/ruby/internal/anyargs.h gc_hook.o: $(hdrdir)/ruby/internal/arithmetic.h gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/char.h @@ -51,6 +52,7 @@ gc_hook.o: $(hdrdir)/ruby/internal/attr/noexcept.h gc_hook.o: $(hdrdir)/ruby/internal/attr/noinline.h gc_hook.o: $(hdrdir)/ruby/internal/attr/nonnull.h gc_hook.o: $(hdrdir)/ruby/internal/attr/noreturn.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/packed_struct.h gc_hook.o: $(hdrdir)/ruby/internal/attr/pure.h gc_hook.o: $(hdrdir)/ruby/internal/attr/restrict.h gc_hook.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h @@ -110,7 +112,6 @@ gc_hook.o: $(hdrdir)/ruby/internal/intern/enumerator.h gc_hook.o: $(hdrdir)/ruby/internal/intern/error.h gc_hook.o: $(hdrdir)/ruby/internal/intern/eval.h gc_hook.o: $(hdrdir)/ruby/internal/intern/file.h -gc_hook.o: $(hdrdir)/ruby/internal/intern/gc.h gc_hook.o: $(hdrdir)/ruby/internal/intern/hash.h gc_hook.o: $(hdrdir)/ruby/internal/intern/io.h gc_hook.o: $(hdrdir)/ruby/internal/intern/load.h @@ -141,12 +142,12 @@ gc_hook.o: $(hdrdir)/ruby/internal/memory.h gc_hook.o: $(hdrdir)/ruby/internal/method.h gc_hook.o: $(hdrdir)/ruby/internal/module.h gc_hook.o: $(hdrdir)/ruby/internal/newobj.h -gc_hook.o: $(hdrdir)/ruby/internal/rgengc.h gc_hook.o: $(hdrdir)/ruby/internal/scan_args.h gc_hook.o: $(hdrdir)/ruby/internal/special_consts.h gc_hook.o: $(hdrdir)/ruby/internal/static_assert.h gc_hook.o: $(hdrdir)/ruby/internal/stdalign.h gc_hook.o: $(hdrdir)/ruby/internal/stdbool.h +gc_hook.o: $(hdrdir)/ruby/internal/stdckdint.h gc_hook.o: $(hdrdir)/ruby/internal/symbol.h gc_hook.o: $(hdrdir)/ruby/internal/value.h gc_hook.o: $(hdrdir)/ruby/internal/value_type.h @@ -173,6 +174,7 @@ tracepoint.o: $(hdrdir)/ruby/backward/2/stdarg.h tracepoint.o: $(hdrdir)/ruby/debug.h tracepoint.o: $(hdrdir)/ruby/defines.h tracepoint.o: $(hdrdir)/ruby/intern.h +tracepoint.o: $(hdrdir)/ruby/internal/abi.h tracepoint.o: $(hdrdir)/ruby/internal/anyargs.h tracepoint.o: $(hdrdir)/ruby/internal/arithmetic.h tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/char.h @@ -210,6 +212,7 @@ tracepoint.o: $(hdrdir)/ruby/internal/attr/noexcept.h tracepoint.o: $(hdrdir)/ruby/internal/attr/noinline.h tracepoint.o: $(hdrdir)/ruby/internal/attr/nonnull.h tracepoint.o: $(hdrdir)/ruby/internal/attr/noreturn.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/packed_struct.h tracepoint.o: $(hdrdir)/ruby/internal/attr/pure.h tracepoint.o: $(hdrdir)/ruby/internal/attr/restrict.h tracepoint.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h @@ -269,7 +272,6 @@ tracepoint.o: $(hdrdir)/ruby/internal/intern/enumerator.h tracepoint.o: $(hdrdir)/ruby/internal/intern/error.h tracepoint.o: $(hdrdir)/ruby/internal/intern/eval.h tracepoint.o: $(hdrdir)/ruby/internal/intern/file.h -tracepoint.o: $(hdrdir)/ruby/internal/intern/gc.h tracepoint.o: $(hdrdir)/ruby/internal/intern/hash.h tracepoint.o: $(hdrdir)/ruby/internal/intern/io.h tracepoint.o: $(hdrdir)/ruby/internal/intern/load.h @@ -300,12 +302,12 @@ tracepoint.o: $(hdrdir)/ruby/internal/memory.h tracepoint.o: $(hdrdir)/ruby/internal/method.h tracepoint.o: $(hdrdir)/ruby/internal/module.h tracepoint.o: $(hdrdir)/ruby/internal/newobj.h -tracepoint.o: $(hdrdir)/ruby/internal/rgengc.h tracepoint.o: $(hdrdir)/ruby/internal/scan_args.h tracepoint.o: $(hdrdir)/ruby/internal/special_consts.h tracepoint.o: $(hdrdir)/ruby/internal/static_assert.h tracepoint.o: $(hdrdir)/ruby/internal/stdalign.h tracepoint.o: $(hdrdir)/ruby/internal/stdbool.h +tracepoint.o: $(hdrdir)/ruby/internal/stdckdint.h tracepoint.o: $(hdrdir)/ruby/internal/symbol.h tracepoint.o: $(hdrdir)/ruby/internal/value.h tracepoint.o: $(hdrdir)/ruby/internal/value_type.h diff --git a/ext/-test-/tracepoint/gc_hook.c b/ext/-test-/tracepoint/gc_hook.c index 5fd46fa518..54c06c54a5 100644 --- a/ext/-test-/tracepoint/gc_hook.c +++ b/ext/-test-/tracepoint/gc_hook.c @@ -28,12 +28,14 @@ static void gc_start_end_i(VALUE tpval, void *data) { if (0) { - rb_trace_arg_t *tparg = rb_tracearg_from_tracepoint(tpval); - fprintf(stderr, "trace: %s\n", rb_tracearg_event_flag(tparg) == RUBY_INTERNAL_EVENT_GC_START ? "gc_start" : "gc_end"); + rb_trace_arg_t *tparg = rb_tracearg_from_tracepoint(tpval); + fprintf(stderr, "trace: %s\n", rb_tracearg_event_flag(tparg) == RUBY_INTERNAL_EVENT_GC_START ? "gc_start" : "gc_end"); } if (invoking == 0) { - rb_postponed_job_register(0, invoke_proc, data); + /* will overwrite the existing handle with new data on the second and subsequent call */ + rb_postponed_job_handle_t h = rb_postponed_job_preregister(0, invoke_proc, data); + rb_postponed_job_trigger(h); } } @@ -45,19 +47,19 @@ set_gc_hook(VALUE module, VALUE proc, rb_event_flag_t event, const char *tp_str, /* disable previous keys */ if (rb_ivar_defined(module, tp_key) != 0 && - RTEST(tpval = rb_ivar_get(module, tp_key))) { - rb_tracepoint_disable(tpval); - rb_ivar_set(module, tp_key, Qnil); + RTEST(tpval = rb_ivar_get(module, tp_key))) { + rb_tracepoint_disable(tpval); + rb_ivar_set(module, tp_key, Qnil); } if (RTEST(proc)) { - if (!rb_obj_is_proc(proc)) { - rb_raise(rb_eTypeError, "trace_func needs to be Proc"); - } + if (!rb_obj_is_proc(proc)) { + rb_raise(rb_eTypeError, "trace_func needs to be Proc"); + } - tpval = rb_tracepoint_new(0, event, gc_start_end_i, (void *)proc); - rb_ivar_set(module, tp_key, tpval); - rb_tracepoint_enable(tpval); + tpval = rb_tracepoint_new(0, event, gc_start_end_i, (void *)proc); + rb_ivar_set(module, tp_key, tpval); + rb_tracepoint_enable(tpval); } return proc; @@ -67,7 +69,7 @@ static VALUE set_after_gc_start(VALUE module, VALUE proc) { return set_gc_hook(module, proc, RUBY_INTERNAL_EVENT_GC_START, - "__set_after_gc_start_tpval__", "__set_after_gc_start_proc__"); + "__set_after_gc_start_tpval__", "__set_after_gc_start_proc__"); } static VALUE diff --git a/ext/-test-/tracepoint/tracepoint.c b/ext/-test-/tracepoint/tracepoint.c index aa8c212f99..2826cc038c 100644 --- a/ext/-test-/tracepoint/tracepoint.c +++ b/ext/-test-/tracepoint/tracepoint.c @@ -21,35 +21,35 @@ tracepoint_track_objspace_events_i(VALUE tpval, void *data) switch (rb_tracearg_event_flag(tparg)) { case RUBY_INTERNAL_EVENT_NEWOBJ: - { - VALUE obj = rb_tracearg_object(tparg); - if (track->objects_count < objects_max) - track->objects[track->objects_count++] = obj; - track->newobj_count++; - break; - } + { + VALUE obj = rb_tracearg_object(tparg); + if (track->objects_count < objects_max) + track->objects[track->objects_count++] = obj; + track->newobj_count++; + break; + } case RUBY_INTERNAL_EVENT_FREEOBJ: - { - track->free_count++; - break; - } + { + track->free_count++; + break; + } case RUBY_INTERNAL_EVENT_GC_START: - { - track->gc_start_count++; - break; - } + { + track->gc_start_count++; + break; + } case RUBY_INTERNAL_EVENT_GC_END_MARK: - { - track->gc_end_mark_count++; - break; - } + { + track->gc_end_mark_count++; + break; + } case RUBY_INTERNAL_EVENT_GC_END_SWEEP: - { - track->gc_end_sweep_count++; - break; - } + { + track->gc_end_sweep_count++; + break; + } default: - rb_raise(rb_eRuntimeError, "unknown event"); + rb_raise(rb_eRuntimeError, "unknown event"); } } @@ -58,9 +58,9 @@ tracepoint_track_objspace_events(VALUE self) { struct tracepoint_track track = {0, 0, 0, 0, 0,}; VALUE tpval = rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_NEWOBJ | RUBY_INTERNAL_EVENT_FREEOBJ | - RUBY_INTERNAL_EVENT_GC_START | RUBY_INTERNAL_EVENT_GC_END_MARK | - RUBY_INTERNAL_EVENT_GC_END_SWEEP, - tracepoint_track_objspace_events_i, &track); + RUBY_INTERNAL_EVENT_GC_START | RUBY_INTERNAL_EVENT_GC_END_MARK | + RUBY_INTERNAL_EVENT_GC_END_SWEEP, + tracepoint_track_objspace_events_i, &track); VALUE result = rb_ary_new(); rb_tracepoint_enable(tpval); |