diff options
Diffstat (limited to 'src/arch/context.c')
| -rw-r--r-- | src/arch/context.c | 38 | 
1 files changed, 10 insertions, 28 deletions
| 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;  } | 
