diff options
author | Steve Bennett <steveb@workware.net.au> | 2014-01-04 08:37:57 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2014-01-15 07:14:17 +1000 |
commit | 73a0367ef52e3c9651b8920d06ebbbe526c96c60 (patch) | |
tree | e837c38eaf5472298b27c3fd439561fd836f5ab1 | |
parent | 9c1e2d993c6d1819833a8eef4e3d5b4e8eaa843d (diff) | |
download | jimtcl-73a0367ef52e3c9651b8920d06ebbbe526c96c60.zip jimtcl-73a0367ef52e3c9651b8920d06ebbbe526c96c60.tar.gz jimtcl-73a0367ef52e3c9651b8920d06ebbbe526c96c60.tar.bz2 |
load: use AssocData to free load handles
Instead of an explicit call in jim.c, store load
handles as AssocData so that it is automatically cleaned up.
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim-load.c | 22 | ||||
-rw-r--r-- | jim.c | 3 |
2 files changed, 14 insertions, 11 deletions
@@ -20,6 +20,8 @@ #define RTLD_LOCAL 0 #endif +static void JimFreeLoadHandles(Jim_Interp *interp, void *data); + /** * Note that Jim_LoadLibrary() requires a path to an existing file. * @@ -66,11 +68,13 @@ int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName) } else if (onload(interp) != JIM_ERR) { /* Add this handle to the stack of handles to be freed */ - if (!interp->loadHandles) { - interp->loadHandles = Jim_Alloc(sizeof(*interp->loadHandles)); - Jim_InitStack(interp->loadHandles); + Jim_Stack *loadHandles = Jim_GetAssocData(interp, "load::handles"); + if (loadHandles == NULL) { + loadHandles = Jim_Alloc(sizeof(*loadHandles)); + Jim_InitStack(loadHandles); + Jim_SetAssocData(interp, "load::handles", JimFreeLoadHandles, loadHandles); } - Jim_StackPush(interp->loadHandles, handle); + Jim_StackPush(loadHandles, handle); Jim_SetEmptyResult(interp); @@ -88,11 +92,13 @@ static void JimFreeOneLoadHandle(void *handle) dlclose(handle); } -void Jim_FreeLoadHandles(Jim_Interp *interp) +static void JimFreeLoadHandles(Jim_Interp *interp, void *data) { - if (interp->loadHandles) { - Jim_FreeStackElements(interp->loadHandles, JimFreeOneLoadHandle); - Jim_Free(interp->loadHandles); + Jim_Stack *handles = data; + + if (handles) { + Jim_FreeStackElements(handles, JimFreeOneLoadHandle); + Jim_Free(handles); } } @@ -5484,9 +5484,6 @@ void Jim_FreeInterp(Jim_Interp *i) Jim_Free(cf); cf = nextcf; } -#ifdef jim_ext_load - Jim_FreeLoadHandles(i); -#endif /* Free the interpreter structure. */ Jim_Free(i); |