diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2011-01-20 13:51:41 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2011-01-20 13:51:41 +0000 |
commit | 3e7bf7cfb5368bb59fb3a620cac1e3dfcccf1ebb (patch) | |
tree | aa6325b05fd4dba28934c5ebdad0ece251fbf577 /desktop/tree_url_node.c | |
parent | 1490258b3e25c05769dc1dfd1a1a6c7179fb88cf (diff) | |
download | netsurf-3e7bf7cfb5368bb59fb3a620cac1e3dfcccf1ebb.tar.gz netsurf-3e7bf7cfb5368bb59fb3a620cac1e3dfcccf1ebb.tar.bz2 |
Ensure we correctly release all icon resources associated with trees, SSL certs, search providers, etc.
svn path=/trunk/netsurf/; revision=11421
Diffstat (limited to 'desktop/tree_url_node.c')
-rw-r--r-- | desktop/tree_url_node.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/desktop/tree_url_node.c b/desktop/tree_url_node.c index 182c9332d..76138a147 100644 --- a/desktop/tree_url_node.c +++ b/desktop/tree_url_node.c @@ -102,12 +102,15 @@ struct icon_entry icon_table[] = { {CONTENT_HTML, NULL} }; +static uint32_t tun_users = 0; void tree_url_node_init(const char *folder_icon_name) { struct icon_entry *entry; char icon_name[MAX_ICON_NAME_LEN]; - + + tun_users++; + if (initialised || option_tree_icons_dir == NULL) return; initialised = true; @@ -122,10 +125,31 @@ void tree_url_node_init(const char *folder_icon_name) ++entry; } while (entry->type != CONTENT_HTML); - } +void tree_url_node_cleanup() +{ + struct icon_entry *entry; + + tun_users--; + + if (tun_users > 0) + return; + + if (!initialised) + return; + initialised = false; + + hlcache_handle_release(folder_icon); + + entry = icon_table; + do { + hlcache_handle_release(entry->icon); + ++entry; + } while (entry->type != CONTENT_HTML); +} + /** * Creates a tree entry for a URL, and links it into the tree * |