diff options
| author | Ken Raeburn <raeburn@mit.edu> | 2007-03-02 05:30:30 +0000 |
|---|---|---|
| committer | Ken Raeburn <raeburn@mit.edu> | 2007-03-02 05:30:30 +0000 |
| commit | b215dee556ea0c2f603b7346170c112cac931f3b (patch) | |
| tree | 55cba0bb301ab9515e0189cd1b1bca2336e35e34 /src/lib/gssapi/mechglue/g_initialize.c | |
| parent | 5ddaaf3bb2d042a526fdd4548f5d632139bc72ee (diff) | |
| download | krb5-b215dee556ea0c2f603b7346170c112cac931f3b.tar.gz krb5-b215dee556ea0c2f603b7346170c112cac931f3b.tar.xz krb5-b215dee556ea0c2f603b7346170c112cac931f3b.zip | |
On unload, free up g_mechSet and g_mechList
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19201 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/gssapi/mechglue/g_initialize.c')
| -rw-r--r-- | src/lib/gssapi/mechglue/g_initialize.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/src/lib/gssapi/mechglue/g_initialize.c b/src/lib/gssapi/mechglue/g_initialize.c index 0c4513cacd..d948b98d12 100644 --- a/src/lib/gssapi/mechglue/g_initialize.c +++ b/src/lib/gssapi/mechglue/g_initialize.c @@ -44,9 +44,11 @@ /* Local functions */ static gss_mech_info searchMechList(const gss_OID); static void updateMechList(void); +static void freeMechList(void); static void register_mech(gss_mechanism, const char *, void *); static OM_uint32 build_mechSet(void); +static void free_mechSet(void); static void init_hardcoded(void); /* @@ -74,6 +76,8 @@ gssint_mechglue_fini(void) { k5_mutex_destroy(&g_mechSetLock); k5_mutex_destroy(&g_mechListLock); + free_mechSet(); + freeMechList(); } @@ -219,6 +223,21 @@ gss_OID_set *mechSet; } /* gss_indicate_mechs */ +/* Call with g_mechSetLock held, or during final cleanup. */ +static void +free_mechSet(void) +{ + int i; + + if (g_mechSet.count != 0) { + for (i = 0; i < g_mechSet.count; i++) + free(g_mechSet.elements[i].elements); + free(g_mechSet.elements); + g_mechSet.elements = NULL; + g_mechSet.count = 0; + } +} + static OM_uint32 build_mechSet(void) { @@ -244,13 +263,7 @@ build_mechSet(void) (void) k5_mutex_lock(&g_mechSetLock); /* if the oid list already exists we must free it first */ - if (g_mechSet.count != 0) { - for (i = 0; i < g_mechSet.count; i++) - free(g_mechSet.elements[i].elements); - free(g_mechSet.elements); - g_mechSet.elements = NULL; - g_mechSet.count = 0; - } + free_mechSet(); /* determine how many elements to have in the list */ mList = g_mechList; @@ -453,6 +466,19 @@ updateMechList(void) } /* updateMechList */ +static void +freeMechList(void) +{ + gss_mech_info cf, next_cf; + + for (cf = g_mechList; cf != NULL; cf = next_cf) { + next_cf = cf->next; + free(cf->uLibName); + free(cf->mechNameStr); + free(cf); + } +} + /* * Register a mechanism. Called with g_mechListLock held. */ |
