Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix more leaks in Zipfs finalization. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | bug-fb2a411b91973d3b |
Files: | files | file ages | folders |
SHA3-256: |
47601ca8e37b50f4acb8f6b111653644 |
User & Date: | pooryorick 2021-05-14 20:49:34.476 |
References
2021-05-14
| ||
21:00 | • Ticket [fb2a411b91] tclZipfs.c exit handlers don't deallocate allocated storage. status still Open with 4 other changes artifact: b30f756ae1 user: pooryorick | |
Context
2021-05-14
| ||
20:58 | Fix more leaks in tclZipfs.c. Valgrind now reports no more leaks in tclZipfs.c Closed-Leaf check-in: 20117765bd user: pooryorick tags: bug-fb2a411b91973d3b | |
20:49 | Fix more leaks in Zipfs finalization. check-in: 47601ca8e3 user: pooryorick tags: bug-fb2a411b91973d3b | |
13:54 | Respect TIP #587 in dde test-cases. check-in: 45fa0ff557 user: jan.nijtmans tags: core-8-branch | |
2021-05-13
| ||
12:49 | Fix remaining leaks in Zipfs finalization. check-in: b05e314d7a user: pooryorick tags: core-8-branch | |
Changes
Changes to generic/tclZipfs.c.
︙ | ︙ | |||
245 246 247 248 249 250 251 | /* * Global variables. * * Most are kept in single ZipFS struct. When build with threading support * this struct is protected by the ZipFSMutex (see below). * | | | 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | /* * Global variables. * * Most are kept in single ZipFS struct. When build with threading support * this struct is protected by the ZipFSMutex (see below). * * The "fileHash" component is the process-wide global table of all known ZIP * archive members in all mounted ZIP archives. * * The "zipHash" components is the process wide global table of all mounted * ZIP archive files. */ static struct { |
︙ | ︙ | |||
343 344 345 346 347 348 349 350 351 352 353 354 355 356 | static int ZipFSLoadFile(Tcl_Interp *interp, Tcl_Obj *path, Tcl_LoadHandle *loadHandle, Tcl_FSUnloadFileProc **unloadProcPtr, int flags); static int ZipMapArchive(Tcl_Interp *interp, ZipFile *zf, void *handle); static void ZipfsExitHandler(ClientData clientData); static void ZipfsSetup(void); static int ZipChannelClose(void *instanceData, Tcl_Interp *interp, int flags); static Tcl_DriverGetHandleProc ZipChannelGetFile; static int ZipChannelRead(void *instanceData, char *buf, int toRead, int *errloc); #if !defined(TCL_NO_DEPRECATED) && (TCL_MAJOR_VERSION < 9) static int ZipChannelSeek(void *instanceData, long offset, | > | 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | static int ZipFSLoadFile(Tcl_Interp *interp, Tcl_Obj *path, Tcl_LoadHandle *loadHandle, Tcl_FSUnloadFileProc **unloadProcPtr, int flags); static int ZipMapArchive(Tcl_Interp *interp, ZipFile *zf, void *handle); static void ZipfsExitHandler(ClientData clientData); static void ZipfsSetup(void); static void ZipfsFinalize(void); static int ZipChannelClose(void *instanceData, Tcl_Interp *interp, int flags); static Tcl_DriverGetHandleProc ZipChannelGetFile; static int ZipChannelRead(void *instanceData, char *buf, int toRead, int *errloc); #if !defined(TCL_NO_DEPRECATED) && (TCL_MAJOR_VERSION < 9) static int ZipChannelSeek(void *instanceData, long offset, |
︙ | ︙ | |||
5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 | } #endif static void ZipfsExitHandler( ClientData clientData) { ZipFile *zf = (ZipFile *) clientData; if (TCL_OK != TclZipfs_Unmount(NULL, zf->mountPoint)) { Tcl_Panic("tried to unmount busy filesystem"); } } /* *------------------------------------------------------------------------- * * TclZipfs_AppHook -- * | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 | } #endif static void ZipfsExitHandler( ClientData clientData) { Tcl_HashEntry *hPtr; Tcl_HashSearch search; if (ZipFS.initialized != -1) { hPtr = Tcl_FirstHashEntry(&ZipFS.fileHash, &search); if (hPtr == NULL) { ZipfsFinalize(); } else { /* ZipFS.fallbackEntryEncoding was already freed by * ZipfsMountExitHandler */ } } } static void ZipfsFinalize(void) { Tcl_DeleteHashTable(&ZipFS.fileHash); ckfree(ZipFS.fallbackEntryEncoding); ZipFS.initialized = -1; } static void ZipfsMountExitHandler( ClientData clientData) { Tcl_HashEntry *hPtr; Tcl_HashSearch search; ZipFile *zf = (ZipFile *) clientData; if (TCL_OK != TclZipfs_Unmount(NULL, zf->mountPoint)) { Tcl_Panic("tried to unmount busy filesystem"); } hPtr = Tcl_FirstHashEntry(&ZipFS.fileHash, &search); if (hPtr == NULL) { ZipfsFinalize(); } } /* *------------------------------------------------------------------------- * * TclZipfs_AppHook -- * |
︙ | ︙ |