From: Karl Palsson Date: Fri, 25 Nov 2016 13:55:56 +0000 (+0000) Subject: valgrind: safely iterate lists X-Git-Tag: libsigrokdecode-0.5.0~119 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=95e40a0ce2e27ba6ea7c97d9956918336160bf7b;p=libsigrokdecode.git valgrind: safely iterate lists Old versions triggered valgrind errors as the API method to remove an entry modifies the list that was being iterated. Signed-off-by: Karl Palsson --- diff --git a/decoder.c b/decoder.c index eba5a28..1151f05 100644 --- a/decoder.c +++ b/decoder.c @@ -992,13 +992,7 @@ SRD_API int srd_decoder_load_all(void) */ SRD_API int srd_decoder_unload_all(void) { - GSList *l; - struct srd_decoder *dec; - - for (l = pd_list; l; l = l->next) { - dec = l->data; - srd_decoder_unload(dec); - } + g_slist_foreach(pd_list, (GFunc)srd_decoder_unload, NULL); g_slist_free(pd_list); pd_list = NULL; diff --git a/srd.c b/srd.c index 2947ca8..344919a 100644 --- a/srd.c +++ b/srd.c @@ -219,12 +219,9 @@ SRD_API int srd_init(const char *path) */ SRD_API int srd_exit(void) { - GSList *l; - srd_dbg("Exiting libsigrokdecode."); - for (l = sessions; l; l = l->next) - srd_session_destroy((struct srd_session *)l->data); + g_slist_foreach(sessions, (GFunc)srd_session_destroy, NULL); srd_decoder_unload_all(); g_slist_free_full(searchpaths, g_free);