diff options
Diffstat (limited to 'src/format/format.c')
-rw-r--r-- | src/format/format.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/format/format.c b/src/format/format.c index 1ee3001..ea67d2d 100644 --- a/src/format/format.c +++ b/src/format/format.c @@ -97,6 +97,8 @@ static void g_binary_format_class_init(GBinFormatClass *klass) static void g_binary_format_init(GBinFormat *format) { + g_rw_lock_init(&format->pt_lock); + g_rw_lock_init(&format->syms_lock); } @@ -212,6 +214,8 @@ SourceEndian g_binary_format_get_endianness(const GBinFormat *format) void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool entry) { + g_rw_lock_writer_lock(&format->pt_lock); + if (entry) { format->entry_points = (virt_t *)realloc(format->entry_points, @@ -235,6 +239,8 @@ void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool ent } + g_rw_lock_writer_unlock(&format->pt_lock); + } @@ -251,16 +257,20 @@ void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool ent * * ******************************************************************************/ -void g_binary_format_setup_disassembling_context(const GBinFormat *format, GProcContext *ctx) +void g_binary_format_setup_disassembling_context(GBinFormat *format, GProcContext *ctx) { size_t i; /* Boucle de parcours */ + g_rw_lock_reader_lock(&format->pt_lock); + for (i = 0; i < format->ep_count; i++) g_proc_context_push_drop_point(ctx, 0, format->entry_points[i]); for (i = 0; i < format->xp_count; i++) g_proc_context_push_drop_point(ctx, 0, format->extra_points[i]); + g_rw_lock_reader_unlock(&format->pt_lock); + } |