#2319 Memory leak while creating and deleting interpreters

obsolete: 8.3.1
closed-out-of-date
None
7
2004-07-16
2003-05-06
Anonymous
No

I am using TCL 8.3.1. Recently when I was trying to corner a memory leak
issue it was found that the leak was occurring in the TCL library while
creating and deleting interpreters. The following is the stack traces
of the leak from purify.

Platform : Solaris 2.8

>>>>
MLK: 512 bytes leaked in 16 blocks
* This memory was allocated from:
malloc [rtlib.o]
TclpAlloc [tclAlloc.c:671]
Tcl_Alloc [tclCkalloc.c:846]
Tcl_GetThreadData [tclThread.c:101]
Tcl_CreateChannel [tclIO.c:937]
TclpOpenFileChannel [tclUnixChan.c:1375]
* Block of 32 bytes (16 times); last block at 0xdbcd38

MLK: 476 bytes leaked in 17 blocks
* This memory was allocated from:
malloc [rtlib.o]
TclpAlloc [tclAlloc.c:671]
Tcl_Alloc [tclCkalloc.c:846]
Tcl_GetThreadData [tclThread.c:101]
InitTimer [tclTimer.c:158]
Tcl_DeleteTimerHandler [tclTimer.c:296]
* Block of 28 bytes (17 times); last block at 0xddd3e8

MLK: 340 bytes leaked in 17 blocks
* This memory was allocated from:
malloc [rtlib.o]
TclpAlloc [tclAlloc.c:671]
Tcl_Alloc [tclCkalloc.c:846]
Tcl_GetThreadData [tclThread.c:101]
Tcl_AsyncReady [tclAsync.c:331]
EvalObjv [tclParse.c:934]
* Block of 20 bytes (17 times); last block at 0xdf3980

MLK: 204 bytes leaked in 17 blocks
* This memory was allocated from:
malloc [rtlib.o]
TclpAlloc [tclAlloc.c:671]
Tcl_Alloc [tclCkalloc.c:846]
Tcl_CreateThreadExitHandler [tclEvent.c:493]
InitTimer [tclTimer.c:160]
Tcl_DeleteTimerHandler [tclTimer.c:296]
* Block of 12 bytes (17 times); last block at 0xdf3430

MLK: 204 bytes leaked in 17 blocks
* This memory was allocated from:
malloc [rtlib.o]
TclpAlloc [tclAlloc.c:671]
Tcl_Alloc [tclCkalloc.c:846]
Tcl_GetThreadData [tclThread.c:101]
TclInitSubsystems [tclEvent.c:738]
Tcl_CreateInterp [tclBasic.c:281]
* Block of 12 bytes (17 times); last block at 0xdb0d30

MLK: 68 bytes leaked in 17 blocks
* This memory was allocated from:
malloc [rtlib.o]
TclpAlloc [tclAlloc.c:671]
Tcl_Alloc [tclCkalloc.c:846]
Tcl_GetThreadData [tclThread.c:101]
TclpOpenFileChannel [tclUnixChan.c:1296]
Tcl_OpenFileChannel [tclIOUtil.c:556]
* Block of 4 bytes (17 times); last block at 0xcec828

MLK: 32 bytes leaked at 0xcc4ed0
* This memory was allocated from:
malloc [rtlib.o]
TclpAlloc [tclAlloc.c:671]
Tcl_Alloc [tclCkalloc.c:846]
Tcl_GetThreadData [tclThread.c:101]
TclInitIOSubsystem [tclIO.c:161]
TclInitSubsystems [tclEvent.c:724]

<<<<

Discussion

  • Jeffrey Hobbs

    Jeffrey Hobbs - 2003-05-06

    Logged In: YES
    user_id=72656

    Please verify with latest Tcl before reporting.

     
  • Jeffrey Hobbs

    Jeffrey Hobbs - 2003-05-06
    • status: open --> pending-out-of-date
     
  • Karthik

    Karthik - 2003-05-06

    Logged In: YES
    user_id=772890

    I tested with the latest version as well. That is 8.3.5. The issue seems to be present in
    this version as well. I was able to fix this by doing something as follows. But am not
    sure if that affects anything else. Can you please let me know if there is a better fix
    available ?

    File : unix/tclUnixChan.c :

    static int FileCloseProc(instanceData, interp)
    ClientData instanceData; /* File state. */
    Tcl_Interp *interp; /* For error reporting - unused. */
    {
    FileState *fsPtr = (FileState *) instanceData;
    FileState **nextPtrPtr;
    int errorCode = 0;
    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);

    [ -- snip -- ]

    for (nextPtrPtr = &(tsdPtr->firstFilePtr); (*nextPtrPtr) != NULL;
    nextPtrPtr = &((*nextPtrPtr)->nextPtr)) {
    if ((*nextPtrPtr) == fsPtr) {
    (*nextPtrPtr) = fsPtr->nextPtr;
    break;
    }
    }
    ckfree((char *) fsPtr);

    /*Added the following to free the allocation made for tsd*/
    if(tsdPtr->firstFilePtr == NULL){
    /* List is empty, free the head */
    ckfree( tsdPtr );
    }

    return errorCode;
    }

     
  • Don Porter

    Don Porter - 2003-05-06

    Logged In: YES
    user_id=80530

    No, the latest version is Tcl 8.4.2.

     
  • Don Porter

    Don Porter - 2003-05-06
    • status: pending-out-of-date --> open-out-of-date
     
  • Jeffrey Hobbs

    Jeffrey Hobbs - 2003-05-11
    • priority: 5 --> 7
    • assigned_to: nobody --> andreas_kupries
     
  • Jeffrey Hobbs

    Jeffrey Hobbs - 2003-05-11

    Logged In: YES
    user_id=72656

    The poster indicates TSD in tclUnixChan.c.

     
  • Andreas Kupries

    Andreas Kupries - 2004-07-16
    • status: open-out-of-date --> closed-out-of-date