From efac4c16ed7c020fc85215888b060b696dc15cca Mon Sep 17 00:00:00 2001 From: Vlad Brezae Date: Wed, 30 Jan 2019 16:17:08 +0200 Subject: [PATCH] [sgen] Logging for objects kept alive from ephemerons (#12650) --- mono/metadata/sgen-client-mono.h | 5 +++++ mono/metadata/sgen-mono.c | 4 +++- mono/sgen/sgen-protocol-def.h | 7 +++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/mono/metadata/sgen-client-mono.h b/mono/metadata/sgen-client-mono.h index b3773f8bb98..92d4e56c7c7 100644 --- a/mono/metadata/sgen-client-mono.h +++ b/mono/metadata/sgen-client-mono.h @@ -683,6 +683,11 @@ sgen_client_binary_protocol_collection_end_stats (long long major_scan, long lon { } +static void G_GNUC_UNUSED +sgen_client_binary_protocol_ephemeron_ref (gpointer list, gpointer key, gpointer val) +{ +} + #define TLAB_ACCESS_INIT SgenThreadInfo *__thread_info__ = mono_tls_get_sgen_thread_info () #define IN_CRITICAL_REGION (__thread_info__->client_info.in_critical_region) diff --git a/mono/metadata/sgen-mono.c b/mono/metadata/sgen-mono.c index 7476f7c78b1..4f078be119d 100644 --- a/mono/metadata/sgen-mono.c +++ b/mono/metadata/sgen-mono.c @@ -686,8 +686,10 @@ sgen_client_mark_ephemerons (ScanCopyContext ctx) copy_func (&cur->key, queue); if (value) { - if (!sgen_is_object_alive_for_current_gen (value)) + if (!sgen_is_object_alive_for_current_gen (value)) { nothing_marked = FALSE; + sgen_binary_protocol_ephemeron_ref (current, key, value); + } copy_func (&cur->value, queue); } } diff --git a/mono/sgen/sgen-protocol-def.h b/mono/sgen/sgen-protocol-def.h index ecb12f857f2..cc1a860c25e 100644 --- a/mono/sgen/sgen-protocol-def.h +++ b/mono/sgen/sgen-protocol-def.h @@ -471,6 +471,13 @@ MATCH_INDEX (BINARY_PROTOCOL_MATCH) IS_VTABLE_MATCH (FALSE) END_PROTOCOL_ENTRY +BEGIN_PROTOCOL_ENTRY_HEAVY3 (binary_protocol_ephemeron_ref, TYPE_POINTER, list, TYPE_POINTER, key, TYPE_POINTER, value) +DEFAULT_PRINT () +IS_ALWAYS_MATCH (FALSE) +MATCH_INDEX (ptr == entry->list ? 0 : ptr == entry->key ? 1 : ptr == entry->value ? 2 : BINARY_PROTOCOL_NO_MATCH) +IS_VTABLE_MATCH (FALSE) +END_PROTOCOL_ENTRY_HEAVY + #undef BEGIN_PROTOCOL_ENTRY0 #undef BEGIN_PROTOCOL_ENTRY1 #undef BEGIN_PROTOCOL_ENTRY2 -- 2.11.4.GIT