diff options
author | bdrewery <bdrewery@FreeBSD.org> | 2016-02-02 23:33:58 +0000 |
---|---|---|
committer | bdrewery <bdrewery@FreeBSD.org> | 2016-02-02 23:33:58 +0000 |
commit | 27e083b53bbc58462060f9d7e7a041bf72ccd3a7 (patch) | |
tree | 4b6b70acd2ece49d47fdbb6b8b08a12d87f24e16 | |
parent | 8d851d4e740abae7b12ae8a5ff7e3dc1daa32a29 (diff) | |
download | FreeBSD-src-27e083b53bbc58462060f9d7e7a041bf72ccd3a7.zip FreeBSD-src-27e083b53bbc58462060f9d7e7a041bf72ccd3a7.tar.gz |
Move logic to destroy a struct catentry to its own function.
This will be used later for memory leak handling.
Obtained from: OneFS
Sponsored by: EMC / Isilon Storage Division
-rw-r--r-- | lib/libc/nls/msgcat.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/lib/libc/nls/msgcat.c b/lib/libc/nls/msgcat.c index 0cba460..3df76b6 100644 --- a/lib/libc/nls/msgcat.c +++ b/lib/libc/nls/msgcat.c @@ -325,6 +325,21 @@ notfound: return ((char *)s); } +static void +catfree(struct catentry *np) +{ + + if (np->catd != NULL && np->catd != NLERR) { + munmap(np->catd->__data, (size_t)np->catd->__size); + free(np->catd); + } + SLIST_REMOVE(&cache, np, catentry, list); + free(np->name); + free(np->path); + free(np->lang); + free(np); +} + int catclose(nl_catd catd) { @@ -341,15 +356,8 @@ catclose(nl_catd catd) SLIST_FOREACH(np, &cache, list) { if (catd == np->catd) { np->refcount--; - if (np->refcount == 0) { - munmap(catd->__data, (size_t)catd->__size); - free(catd); - SLIST_REMOVE(&cache, np, catentry, list); - free(np->name); - free(np->path); - free(np->lang); - free(np); - } + if (np->refcount == 0) + catfree(np); break; } } |