diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-12-29 20:15:04 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-12-29 20:15:04 (GMT) |
commit | 64224ffe7d6dc649bdde858ea5c949444eeaa111 (patch) | |
tree | 368ff1904d71212017edbed3ef0e6c2b6ee3e857 /src/format | |
parent | ecd6b51b126ee473c4942a53d1b17a76dd6b11c3 (diff) |
Protected all accesses to the symbols list using read locks.
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/format.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/format/format.c b/src/format/format.c index 323e006..63c4deb 100644 --- a/src/format/format.c +++ b/src/format/format.c @@ -310,6 +310,7 @@ static void _g_binary_format_remove_symbol(GBinFormat *format, size_t index) /** * TODO : envoyer un signal pour avertir les opérandes concernées. + * TODO : vérifier les conditions d'accès (verrou). */ symbol = format->symbols[index]; @@ -601,6 +602,8 @@ bool g_binary_format_find_symbol_by_label(const GBinFormat *format, const char * result = false; + g_rw_lock_reader_lock(&format->syms_lock); + for (i = 0; i < format->symbols_count && !result; i++) { cur_lbl = g_binary_symbol_get_label(format->symbols[i]); @@ -617,6 +620,8 @@ bool g_binary_format_find_symbol_by_label(const GBinFormat *format, const char * } + g_rw_lock_reader_unlock(&format->syms_lock); + return result; } @@ -646,8 +651,12 @@ static bool _g_binary_format_find_symbol(const GBinFormat *format, const vmpa2t *symbol = NULL; /* TODO : vérifier les doublons côtés appelants */ + g_rw_lock_reader_lock(&format->syms_lock); + found = bsearch(addr, format->symbols, format->symbols_count, sizeof(GBinSymbol *), fn); + g_rw_lock_reader_unlock(&format->syms_lock); + if (found != NULL) { *symbol = *(GBinSymbol **)found; @@ -756,6 +765,10 @@ bool g_binary_format_find_next_symbol_at(const GBinFormat *format, const vmpa2t *symbol = NULL; + g_rw_lock_reader_lock(&format->syms_lock); + + /* TODO : ajouter un peu de dichotomie ici ! */ + for (i = 0; i < format->symbols_count && !result; i++) { range = g_binary_symbol_get_range(format->symbols[i]); @@ -771,6 +784,8 @@ bool g_binary_format_find_next_symbol_at(const GBinFormat *format, const vmpa2t } + g_rw_lock_reader_unlock(&format->syms_lock); + return result; } |