From a585058f1469fe89a23562567e478d9de6f16b8f Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Wed, 25 Apr 2018 00:35:20 +0200 Subject: Locked the register singleton list during updates. --- plugins/dalvik/register.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/dalvik/register.c b/plugins/dalvik/register.c index 51abe2f..0833650 100644 --- a/plugins/dalvik/register.c +++ b/plugins/dalvik/register.c @@ -86,6 +86,7 @@ GDalvikRegister *_g_dalvik_register_new(uint16_t); /* Conservation des registres utilisés */ static GDalvikRegister **_dalvik_registers = NULL; static uint16_t _dreg_count = 0; +G_LOCK_DEFINE_STATIC(_dreg_mutex); /* Fournit le singleton associé à un registre Dalvik. */ @@ -362,6 +363,8 @@ static GDalvikRegister *get_dalvik_register(uint16_t index) GDalvikRegister *result; /* Structure à retourner */ uint16_t i; /* Boucle de parcours */ + G_LOCK(_dreg_mutex); + if (index >= _dreg_count) { _dalvik_registers = realloc(_dalvik_registers, (index + 1) * sizeof(GDalvikRegister *)); @@ -378,6 +381,8 @@ static GDalvikRegister *get_dalvik_register(uint16_t index) result = _dalvik_registers[index]; + G_UNLOCK(_dreg_mutex); + g_object_ref(G_OBJECT(result)); return result; @@ -401,6 +406,8 @@ void clean_dalvik_register_cache(void) { uint16_t i; /* Boucle de parcours */ + G_LOCK(_dreg_mutex); + for (i = 0; i < _dreg_count; i++) g_object_unref(G_OBJECT(_dalvik_registers[i])); @@ -410,4 +417,6 @@ void clean_dalvik_register_cache(void) _dalvik_registers = NULL; _dreg_count = 0; + G_UNLOCK(_dreg_mutex); + } -- cgit v0.11.2-87-g4458