diff options
author | dgp <dgp@users.sourceforge.net> | 2018-04-25 11:09:53 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2018-04-25 11:09:53 (GMT) |
commit | 9ff5b7077a286a44e200859c71d641d9ea3bd60d (patch) | |
tree | ca51c8661de356331efca8727204e02111aca0bf | |
parent | 7234985a63639e4f9c719cba33929c8adaaaa298 (diff) | |
download | tcl-9ff5b7077a286a44e200859c71d641d9ea3bd60d.zip tcl-9ff5b7077a286a44e200859c71d641d9ea3bd60d.tar.gz tcl-9ff5b7077a286a44e200859c71d641d9ea3bd60d.tar.bz2 |
Plug memory leak handling circular path values.
-rw-r--r-- | generic/tclPathObj.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index e9d2fcb..c072fe0 100644 --- a/generic/tclPathObj.c +++ b/generic/tclPathObj.c @@ -2388,16 +2388,14 @@ SetFsPathFromAny( fsPathPtr = ckalloc(sizeof(FsPath)); - fsPathPtr->translatedPathPtr = transPtr; - if (fsPathPtr->translatedPathPtr != NULL) { - Tcl_IncrRefCount(fsPathPtr->translatedPathPtr); - } - if (transPtr != pathPtr) { - /* Redo translation when $env(HOME) changes */ - fsPathPtr->filesystemEpoch = TclFSEpoch(); + if (transPtr == pathPtr) { + transPtr = Tcl_DuplicateObj(pathPtr); + fsPathPtr->filesystemEpoch = 0; } else { - fsPathPtr->filesystemEpoch = 0; + fsPathPtr->filesystemEpoch = TclFSEpoch(); } + Tcl_IncrRefCount(transPtr); + fsPathPtr->translatedPathPtr = transPtr; fsPathPtr->normPathPtr = NULL; fsPathPtr->cwdPtr = NULL; fsPathPtr->nativePathPtr = NULL; |