summaryrefslogtreecommitdiff
path: root/src/format/format.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/format.c')
-rw-r--r--src/format/format.c12
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);
+
}