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
+
+- 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
---
- 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
#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 /* 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;
}