From 63265772e86ca2e0f14a236c8aa964697a7cda70 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Fri, 3 Feb 2012 18:12:17 +0100 Subject: erts: Fix memory reports from export table Report sum from all code index. --- erts/emulator/beam/export.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'erts/emulator/beam/export.c') diff --git a/erts/emulator/beam/export.c b/erts/emulator/beam/export.c index 4a2a77a527..31de141497 100644 --- a/erts/emulator/beam/export.c +++ b/erts/emulator/beam/export.c @@ -40,6 +40,8 @@ static IndexTable export_tables[ERTS_NUM_CODE_IX]; /* Active not locked */ +static erts_smp_atomic_t total_entries_bytes; + #include "erl_smp.h" erts_smp_rwmtx_t export_table_lock; /* Locks the secondary export table. */ @@ -126,6 +128,7 @@ export_alloc(struct export_entry* tmpl_e) Export* obj; blob = (struct export_blob*) erts_alloc(ERTS_ALC_T_EXPORT, sizeof(*blob)); + erts_smp_atomic_add_nob(&total_entries_bytes, sizeof(*blob)); obj = &blob->exp; obj->fake_op_func_info_for_hipe[0] = 0; obj->fake_op_func_info_for_hipe[1] = 0; @@ -165,6 +168,7 @@ export_free(struct export_entry* obj) } } erts_free(ERTS_ALC_T_EXPORT, blob); + erts_smp_atomic_add_nob(&total_entries_bytes, -sizeof(*blob)); } void @@ -177,6 +181,7 @@ init_export_table(void) rwmtx_opt.lived = ERTS_SMP_RWMTX_LONG_LIVED; erts_smp_rwmtx_init_opt(&export_table_lock, &rwmtx_opt, "export_tab"); + erts_smp_atomic_init_nob(&total_entries_bytes, 0); f.hash = (H_FUN) export_hash; f.cmp = (HCMP_FUN) export_cmp; @@ -353,9 +358,19 @@ int export_list_size(ErtsCodeIndex code_ix) int export_table_sz(void) { - return index_table_sz(&export_tables[erts_active_code_ix()]); -} + int i, bytes = 0; + export_read_lock(); + for (i=0; i