summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-11-27 21:44:44 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-11-27 21:44:44 (GMT)
commitb2b43b80eb207fabc8eb5e08798f120f0dd5541e (patch)
treeee6f45a7db857f4d59a191f89a6a51274481b5c7 /src
parent6b1a70c16f83a926f7b1f1fb2af5d6a2e017737b (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')
-rw-r--r--src/analysis/disass/fetch.c3
-rw-r--r--src/arch/context-int.h1
-rw-r--r--src/arch/context.c38
-rw-r--r--src/arch/context.h5
-rw-r--r--src/gtkext/gtkextstatusbar.c5
5 files changed, 19 insertions, 33 deletions
diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c
index bfc0598..5caf573 100644
--- a/src/analysis/disass/fetch.c
+++ b/src/analysis/disass/fetch.c
@@ -374,6 +374,7 @@ static void follow_execution_flow_v2(GProcContext *ctx, const GDelayedFetching *
static void follow_execution_flow(const GLoadedBinary *binary, GProcContext *ctx, mem_area **areas, size_t *count, status_blob_info *info)
{
+#if 0
virt_t virt; /* Adresse de départ dépilée */
vmpa2t addr; /* Conversion en pleine adresse*/
GExeFormat *format; /* Format du fichier binaire */
@@ -406,7 +407,7 @@ static void follow_execution_flow(const GLoadedBinary *binary, GProcContext *ctx
}
-
+#endif
}
static GDelayedFetching template; /* Patron des tâches à venir */
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 *);
diff --git a/src/gtkext/gtkextstatusbar.c b/src/gtkext/gtkextstatusbar.c
index 62d4950..e936866 100644
--- a/src/gtkext/gtkextstatusbar.c
+++ b/src/gtkext/gtkextstatusbar.c
@@ -537,6 +537,8 @@ status_blob_info *init_progessive_status(GtkExtStatusBar *bar, const char *messa
{
status_blob_info *result; /* Information à retourner */
+ return NULL;
+
result = (status_blob_info *)calloc(1, sizeof(status_blob_info));
if (bar != NULL)
@@ -568,6 +570,7 @@ status_blob_info *init_progessive_status(GtkExtStatusBar *bar, const char *messa
void fini_progessive_status(status_blob_info *info)
{
+ return;
gtk_extended_status_bar_remove(info->bar, info->id);
if (info->bar != NULL)
@@ -592,6 +595,7 @@ void fini_progessive_status(status_blob_info *info)
double get_current_progessive_status(const status_blob_info *info)
{
+ return 0.0;
return info->current;
}
@@ -612,6 +616,7 @@ double get_current_progessive_status(const status_blob_info *info)
void inc_progessive_status(status_blob_info *info, double inc)
{
+ return;
assert((info->current + inc) < info->max);
info->current += inc;