Add tcsh-6.21.00-sighup-deadlock.patch, port tcsh-6.18.03-history-file-locking.patch now tcsh-6.21.0-history-file-locking.patch
OBS-URL: https://build.opensuse.org/package/show/shells/tcsh?expand=0&rev=80
This commit is contained in:
parent
7225664b5a
commit
e9e8ac2fed
@ -14,18 +14,18 @@ https://bugzilla.redhat.com/show_bug.cgi?id=879371
|
||||
Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
|
||||
---
|
||||
sh.c | 102 ++++++++++++++++++++++++++++++++++++-------------
|
||||
sh.decls.h | 4 +
|
||||
sh.dol.c | 2
|
||||
sh.err.c | 16 +++++++
|
||||
sh.h | 18 ++++++++
|
||||
sh.hist.c | 126 +++++++++++++++++++++++++++++--------------------------------
|
||||
sh.lex.c | 8 +--
|
||||
sh.sem.c | 2
|
||||
8 files changed, 178 insertions(+), 100 deletions(-)
|
||||
sh.c | 102 +++++++++++++++++++++++++++++++++++++--------------
|
||||
sh.decls.h | 4 +-
|
||||
sh.dol.c | 2 -
|
||||
sh.err.c | 16 ++++++++
|
||||
sh.h | 18 +++++++++
|
||||
sh.hist.c | 122 ++++++++++++++++++++++++++++++-------------------------------
|
||||
sh.lex.c | 8 ++--
|
||||
sh.sem.c | 2 -
|
||||
8 files changed, 178 insertions(+), 96 deletions(-)
|
||||
|
||||
--- sh.c
|
||||
+++ sh.c 2019-05-09 08:16:41.673852638 +0000
|
||||
+++ sh.c 2019-08-22 12:07:57.729632215 +0000
|
||||
@@ -138,6 +138,7 @@ struct saved_state {
|
||||
int cantell;
|
||||
struct Bin B;
|
||||
@ -245,7 +245,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
|
||||
/*
|
||||
--- sh.decls.h
|
||||
+++ sh.decls.h 2019-05-09 08:16:41.673852638 +0000
|
||||
+++ sh.decls.h 2019-08-22 12:07:57.729632215 +0000
|
||||
@@ -37,6 +37,7 @@
|
||||
*/
|
||||
extern Char *gethdir (const Char *);
|
||||
@ -272,7 +272,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
extern void sethistory (int);
|
||||
|
||||
--- sh.dol.c
|
||||
+++ sh.dol.c 2019-05-09 08:16:41.673852638 +0000
|
||||
+++ sh.dol.c 2019-08-22 12:07:57.729632215 +0000
|
||||
@@ -1117,6 +1117,6 @@ again:
|
||||
*obp = 0;
|
||||
tmp = short2str(obuf);
|
||||
@ -282,7 +282,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
cleanup_until(&inheredoc);
|
||||
}
|
||||
--- sh.err.c
|
||||
+++ sh.err.c 2019-05-09 08:16:41.677852563 +0000
|
||||
+++ sh.err.c 2019-08-22 12:07:57.733632140 +0000
|
||||
@@ -511,6 +511,22 @@ open_cleanup(void *xptr)
|
||||
}
|
||||
|
||||
@ -307,7 +307,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
{
|
||||
DIR *dir;
|
||||
--- sh.h
|
||||
+++ sh.h 2019-05-09 08:16:41.677852563 +0000
|
||||
+++ sh.h 2019-08-22 12:07:57.733632140 +0000
|
||||
@@ -49,6 +49,24 @@
|
||||
# include <inttypes.h>
|
||||
#endif
|
||||
@ -334,7 +334,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
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 12:24:42.518825681 +0000
|
||||
@@ -32,6 +32,8 @@
|
||||
#include "sh.h"
|
||||
#include <stdio.h> /* for rename(2), grr. */
|
||||
@ -531,15 +531,15 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
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,35 +1287,37 @@ rechist(Char *fname, int ref)
|
||||
cleanup_push(lockpath, dotlock_cleanup);
|
||||
#endif
|
||||
}
|
||||
@ -561,6 +561,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
- 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). */
|
||||
@ -593,13 +594,9 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
+ SHOUT = ftmp;
|
||||
+ }
|
||||
didfds = oldidfds;
|
||||
-#ifndef WINNT_NATIVE
|
||||
- (void)rename(path, short2str(fname));
|
||||
-#else
|
||||
- (void)ReplaceFile( short2str(fname),path,NULL,0,NULL,NULL);
|
||||
-#endif
|
||||
cleanup_until(fname);
|
||||
}
|
||||
#ifndef WINNT_NATIVE
|
||||
(void)rename(path, short2str(fname));
|
||||
@@ -1335,11 +1330,12 @@ rechist(Char *fname, int ref)
|
||||
|
||||
|
||||
/* This is the entry point for loading history data from a file. */
|
||||
@ -615,7 +612,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
|
||||
if (fname != NULL)
|
||||
loadhist_cmd[2] = fname;
|
||||
@@ -1342,17 +1334,19 @@ loadhist(Char *fname, int mflg)
|
||||
@@ -1348,17 +1344,19 @@ loadhist(Char *fname, int mflg)
|
||||
else
|
||||
loadhist_cmd[2] = STRtildothist;
|
||||
|
||||
@ -640,7 +637,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
|
||||
void
|
||||
--- sh.lex.c
|
||||
+++ sh.lex.c 2019-05-09 08:16:41.677852563 +0000
|
||||
+++ sh.lex.c 2019-08-22 12:07:57.733632140 +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 +675,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
|
||||
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 12:07:57.733632140 +0000
|
||||
@@ -905,7 +905,7 @@ doio(struct command *t, int *pipein, int
|
||||
fd = xopen(tmp, O_WRONLY|O_APPEND|O_LARGEFILE);
|
||||
#else /* !O_APPEND */
|
50
tcsh-6.21.00-sighup-deadlock.patch
Normal file
50
tcsh-6.21.00-sighup-deadlock.patch
Normal file
@ -0,0 +1,50 @@
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Aug 22 12:27:18 UTC 2019 - Dr. Werner Fink <werner@suse.de>
|
||||
|
||||
- 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
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu May 9 08:50:56 UTC 2019 - Dr. Werner Fink <werner@suse.de>
|
||||
|
||||
|
@ -32,8 +32,10 @@ Patch2: tcsh-6.16.00-norm-cmd.dif
|
||||
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 @@ correction, a history mechanism, job control, and a C-like syntax.
|
||||
%patch4 -b .colorls
|
||||
%patch5 -b .dspmbyte
|
||||
%patch6 -b .catalogs
|
||||
%patch7 -p1 -b .sighup
|
||||
%patch9 -b .histlock
|
||||
%patch10 -b .histmerg
|
||||
%patch11 -b .histlckord
|
||||
|
Loading…
Reference in New Issue
Block a user