Hello community, here is the log from the commit of package tcsh for openSUSE:Factory checked in at 2019-09-02 13:21:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tcsh (Old) and /work/SRC/openSUSE:Factory/.tcsh.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tcsh" Mon Sep 2 13:21:58 2019 rev:64 rq:727010 version:6.21.00 Changes: -------- --- /work/SRC/openSUSE:Factory/tcsh/tcsh.changes 2019-05-14 13:29:29.987205212 +0200 +++ /work/SRC/openSUSE:Factory/.tcsh.new.7948/tcsh.changes 2019-09-02 13:22:00.197350224 +0200 @@ -1,0 +2,8 @@ +Thu Aug 22 12:27:18 UTC 2019 - Dr. Werner Fink <[email protected]> + +- Add patch tcsh-6.21.00-sighup-deadlock.patch from upstream list + * Do not (re)run SIGHUP handler during rewrite history + * Port and rename patch tcsh-6.18.03-history-file-locking.patch + which now becomes tcsh-6.21.0-history-file-locking.patch + +------------------------------------------------------------------- Old: ---- tcsh-6.18.03-history-file-locking.patch New: ---- tcsh-6.21.0-history-file-locking.patch tcsh-6.21.00-sighup-deadlock.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tcsh.spec ++++++ --- /var/tmp/diff_new_pack.0Rksqb/_old 2019-09-02 13:22:01.073350059 +0200 +++ /var/tmp/diff_new_pack.0Rksqb/_new 2019-09-02 13:22:01.073350059 +0200 @@ -32,8 +32,10 @@ Patch4: tcsh-6.18.03-colorls.dif Patch5: tcsh-6.17.06-dspmbyte.dif Patch6: tcsh-6.18.03-catalogs.dif +# PATCH-FIX-UPSTREAM Do not (re)run SIGHUP handler during rewrite history +Patch7: tcsh-6.21.00-sighup-deadlock.patch # PATCH-FIX-SUSE add history file locking (bsc#901076) -Patch9: tcsh-6.18.03-history-file-locking.patch +Patch9: tcsh-6.21.0-history-file-locking.patch Patch10: tcsh-6.18.03-history-merge.dif # PATCH-FIX-SUSE fix history file locking: first unlock then close Patch11: tcsh-6.19.00-history-file-locking-order.patch @@ -64,6 +66,7 @@ %patch4 -b .colorls %patch5 -b .dspmbyte %patch6 -b .catalogs +%patch7 -p1 -b .sighup %patch9 -b .histlock %patch10 -b .histmerg %patch11 -b .histlckord ++++++ tcsh-6.20.00-avoid-dotlock-for-fcntl.patch ++++++ --- /var/tmp/diff_new_pack.0Rksqb/_old 2019-09-02 13:22:01.141350046 +0200 +++ /var/tmp/diff_new_pack.0Rksqb/_new 2019-09-02 13:22:01.145350045 +0200 @@ -4,7 +4,7 @@ --- sh.hist.c +++ sh.hist.c 2017-07-19 10:01:20.795354927 +0000 -@@ -1274,6 +1274,11 @@ rechist(Char *fname, int ref) +@@ -1278,6 +1278,11 @@ rechist(Char *fname, int ref) } if (merge) { @@ -16,7 +16,7 @@ if (lock) { #ifndef WINNT_NATIVE char *lockpath = strsave(short2str(fname)); -@@ -1283,6 +1288,7 @@ rechist(Char *fname, int ref) +@@ -1287,6 +1292,7 @@ rechist(Char *fname, int ref) cleanup_push(lockpath, dotlock_cleanup); #endif } ++++++ tcsh-6.18.03-history-file-locking.patch -> tcsh-6.21.0-history-file-locking.patch ++++++ --- /work/SRC/openSUSE:Factory/tcsh/tcsh-6.18.03-history-file-locking.patch 2019-05-14 13:29:29.819204761 +0200 +++ /work/SRC/openSUSE:Factory/.tcsh.new.7948/tcsh-6.21.0-history-file-locking.patch 2019-09-02 13:22:00.133350236 +0200 @@ -14,18 +14,18 @@ Changes by Fridolin Pokorny <[email protected]> --- - sh.c | 102 ++++++++++++++++++++++++++++++++++++------------- + sh.c | 102 ++++++++++++++++++++++++++++++++++++------------ sh.decls.h | 4 + sh.dol.c | 2 sh.err.c | 16 +++++++ sh.h | 18 ++++++++ - sh.hist.c | 126 +++++++++++++++++++++++++++++-------------------------------- + sh.hist.c | 127 ++++++++++++++++++++++++++++--------------------------------- sh.lex.c | 8 +-- sh.sem.c | 2 - 8 files changed, 178 insertions(+), 100 deletions(-) + 8 files changed, 178 insertions(+), 101 deletions(-) --- sh.c -+++ sh.c 2019-05-09 08:16:41.673852638 +0000 ++++ sh.c 2019-08-22 13:02:31.780361102 +0000 @@ -138,6 +138,7 @@ struct saved_state { int cantell; struct Bin B; @@ -245,7 +245,7 @@ /* --- sh.decls.h -+++ sh.decls.h 2019-05-09 08:16:41.673852638 +0000 ++++ sh.decls.h 2019-08-22 13:02:31.780361102 +0000 @@ -37,6 +37,7 @@ */ extern Char *gethdir (const Char *); @@ -272,7 +272,7 @@ extern void sethistory (int); --- sh.dol.c -+++ sh.dol.c 2019-05-09 08:16:41.673852638 +0000 ++++ sh.dol.c 2019-08-22 13:02:31.780361102 +0000 @@ -1117,6 +1117,6 @@ again: *obp = 0; tmp = short2str(obuf); @@ -282,7 +282,7 @@ cleanup_until(&inheredoc); } --- sh.err.c -+++ sh.err.c 2019-05-09 08:16:41.677852563 +0000 ++++ sh.err.c 2019-08-22 13:02:31.780361102 +0000 @@ -511,6 +511,22 @@ open_cleanup(void *xptr) } @@ -307,7 +307,7 @@ { DIR *dir; --- sh.h -+++ sh.h 2019-05-09 08:16:41.677852563 +0000 ++++ sh.h 2019-08-22 13:02:31.784361027 +0000 @@ -49,6 +49,24 @@ # include <inttypes.h> #endif @@ -334,7 +334,7 @@ typedef unsigned long intptr_t; #endif --- sh.hist.c -+++ sh.hist.c 2019-05-09 08:36:00.679789483 +0000 ++++ sh.hist.c 2019-08-22 13:02:44.684119766 +0000 @@ -32,6 +32,8 @@ #include "sh.h" #include <stdio.h> /* for rename(2), grr. */ @@ -531,15 +531,15 @@ rechist(Char *fname, int ref) { - Char *snum, *rs; -- int fp, ftmp, oldidfds; +- int fp, ftmp, oldidfds, phup_disabled_tmp; + Char *snum; -+ int fd = -1, ftmp, oldidfds; ++ int fd = -1, ftmp, oldidfds, phup_disabled_tmp; struct varent *shist; - char path[MAXPATHLEN]; struct stat st; static Char *dumphist[] = {STRhistory, STRmhT, 0, 0}; -@@ -1290,50 +1283,49 @@ rechist(Char *fname, int ref) +@@ -1294,52 +1287,50 @@ rechist(Char *fname, int ref) cleanup_push(lockpath, dotlock_cleanup); #endif } @@ -561,6 +561,7 @@ - if (fp == -1) { - didfds = oldidfds; - cleanup_until(fname); +- phup_disabled = phup_disabled_tmp; - return; + if (fd <= 0) { + /* Open .history file for writing (if not open yet). */ @@ -599,6 +600,7 @@ - (void)ReplaceFile( short2str(fname),path,NULL,0,NULL,NULL); -#endif cleanup_until(fname); + phup_disabled = phup_disabled_tmp; } @@ -615,7 +617,7 @@ if (fname != NULL) loadhist_cmd[2] = fname; -@@ -1342,17 +1334,19 @@ loadhist(Char *fname, int mflg) +@@ -1348,17 +1339,19 @@ loadhist(Char *fname, int mflg) else loadhist_cmd[2] = STRtildothist; @@ -640,7 +642,7 @@ void --- sh.lex.c -+++ sh.lex.c 2019-05-09 08:16:41.677852563 +0000 ++++ sh.lex.c 2019-08-22 13:02:31.784361027 +0000 @@ -1608,7 +1608,7 @@ wide_read(int fildes, Char *buf, size_t /* Throwing away possible partial multibyte characters on error if the stream is not seekable */ @@ -678,7 +680,7 @@ fbuf = xcalloc(2, sizeof(Char **)); fblocks = 1; --- sh.sem.c -+++ sh.sem.c 2019-05-09 08:16:41.677852563 +0000 ++++ sh.sem.c 2019-08-22 13:02:31.784361027 +0000 @@ -905,7 +905,7 @@ doio(struct command *t, int *pipein, int fd = xopen(tmp, O_WRONLY|O_APPEND|O_LARGEFILE); #else /* !O_APPEND */ ++++++ tcsh-6.21.00-sighup-deadlock.patch ++++++ tcsh can deadlock with itself if savehist is confgured with "merge" and "lock", and two SIGHUPs are received in rapid succession. The mechanism of the deadlock is the first SIGHUP triggers a rechist() and while that rechist() is executing (and after it has created the lock file), another SIGHUP triggers a another rechist() which then waits forever for the lock the the first rechist() created to be released (which will never happen). --- tcsh-6.21.00/sh.hist.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) --- tcsh-6.21.00/sh.hist.c +++ tcsh-6.21.00/sh.hist.c 2019-08-22 12:05:25.800474245 +0000 @@ -1219,7 +1219,7 @@ void rechist(Char *fname, int ref) { Char *snum, *rs; - int fp, ftmp, oldidfds; + int fp, ftmp, oldidfds, phup_disabled_tmp; struct varent *shist; char path[MAXPATHLEN]; struct stat st; @@ -1227,6 +1227,10 @@ rechist(Char *fname, int ref) if (fname == NULL && !ref) return; + + phup_disabled_tmp = phup_disabled; + phup_disabled = 1; + /* * If $savehist is just set, we use the value of $history * else we use the value in $savehist @@ -1301,6 +1305,7 @@ rechist(Char *fname, int ref) if (fp == -1) { didfds = oldidfds; cleanup_until(fname); + phup_disabled = phup_disabled_tmp; return; } /* Try to preserve ownership and permissions of the original history file */ @@ -1325,6 +1330,7 @@ rechist(Char *fname, int ref) (void)ReplaceFile( short2str(fname),path,NULL,0,NULL,NULL); #endif cleanup_until(fname); + phup_disabled = phup_disabled_tmp; }
