Skip to content

Commit 12f88d4

Browse files
committedApr 27, 2016
Added CallSite#reset.
This will enable resetting all the CallSites in a process to a known state to be able to eg using CallSite data for computing code coverage.
1 parent 20938ee commit 12f88d4

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed
 

Diff for: ‎core/call_site.rb

+5
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ def misses
2828
raise PrimitiveFailure, "CallSite#misses primitive failed"
2929
end
3030

31+
def reset
32+
Rubinius.primitive :call_site_reset
33+
raise PrimitiveFailure, "CallSite#reset primitive failed"
34+
end
35+
3136
def inspect
3237
"#<#{self.class.name}:0x#{self.object_id.to_s(16)} name=#{@name} ip=#{ip} depth=#{depth} invokes=#{invokes} hits=#{hits} misses=#{misses}>"
3338
end

Diff for: ‎machine/builtin/call_site.hpp

+15-3
Original file line numberDiff line numberDiff line change
@@ -358,9 +358,9 @@ namespace rubinius {
358358
if(atomic::compare_and_swap(reinterpret_cast<void**>(updated_caches),
359359
previous_caches, inline_caches))
360360
{
361-
if(previous_caches) delete[] previous_caches;
361+
if(previous_caches) delete previous_caches;
362362
} else {
363-
delete[] inline_caches;
363+
delete inline_caches;
364364
}
365365

366366
return;
@@ -397,7 +397,7 @@ namespace rubinius {
397397
execute(CallSite::dispatch);
398398
cache_miss(CallSite::dispatch);
399399

400-
delete[] caches();
400+
delete caches();
401401
caches(NULL);
402402

403403
atomic::memory_barrier();
@@ -506,6 +506,18 @@ namespace rubinius {
506506
return Integer::from(state, misses());
507507
}
508508

509+
// Rubinius.primitive :call_site_reset
510+
CallSite* reset(STATE) {
511+
if(caches()) delete caches();
512+
513+
invokes(0);
514+
execute(default_execute);
515+
cache_miss(default_execute);
516+
caches(NULL);
517+
518+
return this;
519+
}
520+
509521
class Info : public TypeInfo {
510522
public:
511523
Info(object_type type)

0 commit comments

Comments
 (0)