Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | Fix for [688fcc7082fa], memory error during deletion of imported routine. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | core-8-branch |
Files: | files | file ages | folders |
SHA3-256: |
037c0ff27fd5d0a2af1c3db9cfda4afc |
User & Date: | pooryorick 2020-08-16 10:04:44.849 |
2021-06-21
| ||
21:36 | • Ticket [688fcc7082] trace on imported alias deletes alias and then calls import and triggers memory error status still Open with 3 other changes artifact: 4a21a16411 user: pooryorick | |
2020-08-16
| ||
10:06 | • Ticket [688fcc7082]: 3 changes artifact: d6a8917c2d user: pooryorick | |
2020-08-18
| ||
13:33 | Merge 8.6 check-in: 95051c8d1e user: jan.nijtmans tags: core-8-branch | |
2020-08-17
| ||
16:38 | Merge bug-3422267ed6b79922 check-in: 19bdabfa68 user: pooryorick tags: bug-3422267ed6b79922 | |
2020-08-16
| ||
12:09 | merge core-8-branch check-in: 051b01373f user: pooryorick tags: bug-3422267ed6b79922 | |
10:04 | Fix for [688fcc7082fa], memory error during deletion of imported routine. check-in: 037c0ff27f user: pooryorick tags: core-8-branch | |
2020-08-13
| ||
14:20 | More usage of TclNewIntObj() macro check-in: 539d9dcf7e user: jan.nijtmans tags: core-8-branch | |
Changes to generic/tclBasic.c.
3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 | * This field is checked in Tcl_EvalObj and ObjInterpProc, and code whose * compilation epoch doesn't match is recompiled. */ if (cmdPtr->compileProc != NULL) { iPtr->compileEpoch++; } if (cmdPtr->deleteProc != NULL) { /* * Delete the command's client data. If this was an imported command * created when a command was imported into a namespace, this client * data will be a pointer to a ImportedCmdData structure describing * the "real" command that this imported command refers to. * * If you are getting a crash during the call to deleteProc and * cmdPtr->deleteProc is a pointer to the function free(), the most * likely cause is that your extension allocated memory for the * clientData argument to Tcl_CreateObjCommand with the ckalloc() * macro and you are now trying to deallocate this memory with free() * instead of ckfree(). You should pass a pointer to your own method * that calls ckfree(). */ cmdPtr->deleteProc(cmdPtr->deleteData); | > > > > > > > > > > > > > < < < < < < < < < < < < < < | 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 | * This field is checked in Tcl_EvalObj and ObjInterpProc, and code whose * compilation epoch doesn't match is recompiled. */ if (cmdPtr->compileProc != NULL) { iPtr->compileEpoch++; } if (!(cmdPtr->flags & CMD_REDEF_IN_PROGRESS)) { /* * Delete any imports of this routine before deleting this routine itself. * See issue 688fcc7082fa. */ for (refPtr = cmdPtr->importRefPtr; refPtr != NULL; refPtr = nextRefPtr) { nextRefPtr = refPtr->nextPtr; importCmd = (Tcl_Command) refPtr->importedCmdPtr; Tcl_DeleteCommandFromToken(interp, importCmd); } } if (cmdPtr->deleteProc != NULL) { /* * Delete the command's client data. If this was an imported command * created when a command was imported into a namespace, this client * data will be a pointer to a ImportedCmdData structure describing * the "real" command that this imported command refers to. * * If you are getting a crash during the call to deleteProc and * cmdPtr->deleteProc is a pointer to the function free(), the most * likely cause is that your extension allocated memory for the * clientData argument to Tcl_CreateObjCommand with the ckalloc() * macro and you are now trying to deallocate this memory with free() * instead of ckfree(). You should pass a pointer to your own method * that calls ckfree(). */ cmdPtr->deleteProc(cmdPtr->deleteData); } /* * Don't use hPtr to delete the hash entry here, because it's possible * that the deletion callback renamed the command. Instead, use * cmdPtr->hptr, and make sure that no-one else has already deleted the * hash entry. |