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;
 }
 
 

Reply via email to