Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Oct 2009 20:19:16 +0000 (UTC)
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        cvs-src-old@freebsd.org
Subject:   cvs commit: src/contrib/tcsh sh.c
Message-ID:  <200910062019.n96KJalP029646@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
rdivacky    2009-10-06 20:19:16 UTC

  FreeBSD src repository

  Modified files:
    contrib/tcsh         sh.c 
  Log:
  SVN rev 197812 on 2009-10-06 20:19:16Z by rdivacky
  
  Fix tcsh losing history when tcsh terminates because the pty beneath it
  is closed.
  
  Diagnosed by Ted Anderson:
  
  New signal queuing logic was introduced in 6.15 and allows the signal handlers
  to be run explicitly by calling handle_pending_signals, instead of
  immediately when the signal is delivered.  This function is called at
  various places, typically when receiving a EINTR from a slow system call
  such as read or write.  In the pty exit case, it was called from xwrite,
  called from flush, while printing the "exit" message after receiving EOF
  when reading from the pty (note that the read did not return EINTR but
  zero bytes, indicating EOF).  The SIGHUP handler, phup(), called
  rechist, which opened the history file and began writing the merged
  history to it.  This process invoked flush recursively to actually write
  the data.  In this case, however, the flush noticed it was being called
  recursively and decided fail by calling stderror.
  
  My conclusion was that the signal was being handled at a bad time.  But
  whether to fix flush not to care about the recursive call, or to handle
  the signal some other time and when to handle it, was unclear to me.
  However, by adding an extra call to handle_pending_signals, just after
  process() returns to main(), I was able to avoid the truncated history
  after network outages and similar failures.  I verified this fix in
  version 6.17.
  
  Approved by:    ed (mentor)
  MFC after:      1 week
  
  Revision  Changes    Path
  1.4       +2 -0      src/contrib/tcsh/sh.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200910062019.n96KJalP029646>