diff options
author | sebres <sebres@users.sourceforge.net> | 2018-04-30 11:36:31 (GMT) |
---|---|---|
committer | sebres <sebres@users.sourceforge.net> | 2018-04-30 11:36:31 (GMT) |
commit | 6ef77228ca33c92d22e830a0d5f86ef1b34e7398 (patch) | |
tree | 623e06925a7930718bab7ca5c59a7e33574081cd /generic | |
parent | c876decde3e6b34582d26e1cef4967b777a8753c (diff) | |
parent | ddfce0ed3f91a335d169f6f25cae2da7051d0631 (diff) | |
download | tcl-6ef77228ca33c92d22e830a0d5f86ef1b34e7398.zip tcl-6ef77228ca33c92d22e830a0d5f86ef1b34e7398.tar.gz tcl-6ef77228ca33c92d22e830a0d5f86ef1b34e7398.tar.bz2 |
merge core-8-5-branch (fix-1613456fff)
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclFCmd.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/generic/tclFCmd.c b/generic/tclFCmd.c index bb814ea..0f0f5da 100644 --- a/generic/tclFCmd.c +++ b/generic/tclFCmd.c @@ -363,14 +363,7 @@ TclFileDeleteCmd( */ if (Tcl_FSLstat(objv[i], &statBuf) != 0) { - /* - * Trying to delete a file that does not exist is not considered - * an error, just a no-op - */ - - if (errno != ENOENT) { - result = TCL_ERROR; - } + result = TCL_ERROR; } else if (S_ISDIR(statBuf.st_mode)) { /* * We own a reference count on errorBuffer, if it was set as a @@ -406,13 +399,20 @@ TclFileDeleteCmd( } if (result != TCL_OK) { - result = TCL_ERROR; /* + * Avoid possible race condition (file/directory deleted after call + * of lstat), so bypass ENOENT because not an error, just a no-op + */ + if (errno == ENOENT) { + result = TCL_OK; + continue; + } + /* * It is important that we break on error, otherwise we might end * up owning reference counts on numerous errorBuffers. */ - + result = TCL_ERROR; break; } } |