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:
parent
c61a927d1d
commit
4414e54ea7
2 changed files with 13 additions and 6 deletions
|
@ -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,
|
||||
|
|
14
Src/hist.c
14
Src/hist.c
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue