diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-11-27 21:44:44 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-11-27 21:44:44 (GMT) |
commit | b2b43b80eb207fabc8eb5e08798f120f0dd5541e (patch) | |
tree | ee6f45a7db857f4d59a191f89a6a51274481b5c7 /src/arch | |
parent | 6b1a70c16f83a926f7b1f1fb2af5d6a2e017737b (diff) |
Protected other data access using locks.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@611 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/context-int.h | 1 | ||||
-rw-r--r-- | src/arch/context.c | 38 | ||||
-rw-r--r-- | src/arch/context.h | 5 |
3 files changed, 12 insertions, 32 deletions
diff --git a/src/arch/context-int.h b/src/arch/context-int.h index 086a8ec..b7f7a20 100644 --- a/src/arch/context-int.h +++ b/src/arch/context-int.h @@ -49,6 +49,7 @@ struct _GProcContext vmpa2t *extra_symbols; /* Adresses de symboles */ size_t esyms_count; /* Nombres de nouveautés */ + GMutex es_access; /* Accès à cette même liste */ }; diff --git a/src/arch/context.c b/src/arch/context.c index 968a6ea..fe2e220 100644 --- a/src/arch/context.c +++ b/src/arch/context.c @@ -97,6 +97,7 @@ static void g_proc_context_init(GProcContext *ctx) ctx->extra_symbols = NULL; ctx->esyms_count = 0; + g_mutex_init(&ctx->es_access); } @@ -157,33 +158,6 @@ void g_proc_context_push_drop_point(GProcContext *ctx, virt_t addr) /****************************************************************************** * * -* Paramètres : ctx = contexte de désassemblage à consulter. * -* * -* Description : Indique si des points de départ restent à traiter ou non. * -* * -* Retour : true s'il existe encore au moins un point, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool g_proc_context_has_drop_points(const GProcContext *ctx) -{ - bool result; /* Etat à retourner */ - - g_mutex_lock(&ctx->dp_access); - - result = (ctx->dp_count > 0); - - g_mutex_unlock(&ctx->dp_access); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : ctx = contexte de désassemblage à consulter. * * addr = adresse de mémoire virtuelle à rechercher. * * * @@ -195,7 +169,7 @@ bool g_proc_context_has_drop_points(const GProcContext *ctx) * * ******************************************************************************/ -bool g_proc_context_has_addr_as_drop_points(const GProcContext *ctx, virt_t addr) +bool g_proc_context_has_addr_as_drop_points(GProcContext *ctx, virt_t addr) { bool result; /* Bilan à retourner */ size_t i; /* Boucle de parcours */ @@ -270,10 +244,14 @@ bool g_proc_context_pop_drop_point(GProcContext *ctx, virt_t *virt) void g_proc_context_push_new_symbol_at(GProcContext *ctx, const vmpa2t *addr) { + g_mutex_lock(&ctx->es_access); + ctx->extra_symbols = (vmpa2t *)realloc(ctx->extra_symbols, ++ctx->esyms_count * sizeof(vmpa2t)); copy_vmpa(&ctx->extra_symbols[ctx->esyms_count - 1], addr); + g_mutex_unlock(&ctx->es_access); + } @@ -294,6 +272,8 @@ bool g_proc_context_pop_new_symbol_at(GProcContext *ctx, vmpa2t *addr) { bool result; /* Bilan à retourner */ + g_mutex_lock(&ctx->es_access); + result = (ctx->esyms_count > 0); if (result) @@ -302,6 +282,8 @@ bool g_proc_context_pop_new_symbol_at(GProcContext *ctx, vmpa2t *addr) copy_vmpa(addr, &ctx->extra_symbols[ctx->esyms_count]); } + g_mutex_unlock(&ctx->es_access); + return result; } diff --git a/src/arch/context.h b/src/arch/context.h index 973b7ae..36eb3e6 100644 --- a/src/arch/context.h +++ b/src/arch/context.h @@ -54,11 +54,8 @@ GType g_proc_context_get_type(void); /* Ajoute une adresse virtuelle comme point de départ de code. */ void g_proc_context_push_drop_point(GProcContext *, virt_t); -/* Indique si des points de départ restent à traiter ou non. */ -bool g_proc_context_has_drop_points(const GProcContext *); - /* Précise si une adresse donnée figure comme point de départ. */ -bool g_proc_context_has_addr_as_drop_points(const GProcContext *, virt_t); +bool g_proc_context_has_addr_as_drop_points(GProcContext *, virt_t); /* Fournit une adresse virtuelle comme point de départ de code. */ bool g_proc_context_pop_drop_point(GProcContext *, virt_t *); |