1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-02-02 03:42:16 +01:00

33116: followup to 32580 to prevent double-locking with shared or incremental history

This commit is contained in:
Barton E. Schaefer 2014-09-06 22:10:30 -07:00
parent c61a927d1d
commit 4414e54ea7
2 changed files with 13 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2014-09-06 Barton E. Schaefer <schaefer@zsh.org>
* 33116: Src/hist.c: followup to 32580 to prevent double-locking
with shared or incremental history
2014-08-21 Mikael Magnusson <mikachu@gmail.com>
* 33061: Completion/Zsh/Command/_setopt,

View file

@ -2490,6 +2490,9 @@ flockhistfile(char *fn, int keep_trying)
struct flock lck;
int ctr = keep_trying ? 9 : 0;
if (flock_fd >= 0)
return 0; /* already locked */
if ((flock_fd = open(unmeta(fn), O_RDWR | O_NOCTTY)) < 0)
return errno == ENOENT ? 0 : 2; /* "successfully" locked missing file */
@ -2768,12 +2771,6 @@ lockhistfile(char *fn, int keep_trying)
if (!fn && !(fn = getsparam("HISTFILE")))
return 1;
#ifdef HAVE_FCNTL_H
if (isset(HISTFCNTLLOCK) && flock_fd < 0) {
return flockhistfile(fn, keep_trying);
}
#endif
if (!lockhistct++) {
struct stat sb;
int fd;
@ -2786,6 +2783,11 @@ lockhistfile(char *fn, int keep_trying)
# endif
#endif
#ifdef HAVE_FCNTL_H
if (isset(HISTFCNTLLOCK))
return flockhistfile(fn, keep_trying);
#endif
lockfile = bicat(unmeta(fn), ".LOCK");
/* NOTE: only use symlink locking on a link()-having host in order to
* avoid a change from open()-based locking to symlink()-based. */