Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Commits on Jan 22, 2009
  1. @peff @gitster

    refactor signal handling for cleanup functions

    peff authored gitster committed
    The current code is very inconsistent about which signals
    are caught for doing cleanup of temporary files and lock
    files. Some callsites checked only SIGINT, while others
    checked a variety of death-dealing signals.
    
    This patch factors out those signals to a single function,
    and then calls it everywhere. For some sites, that means
    this is a simple clean up. For others, it is an improvement
    in that they will now properly clean themselves up after a
    larger variety of signals.
    
    Signed-off-by: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @peff @gitster

    chain kill signals for cleanup functions

    peff authored gitster committed
    If a piece of code wanted to do some cleanup before exiting
    (e.g., cleaning up a lockfile or a tempfile), our usual
    strategy was to install a signal handler that did something
    like this:
    
      do_cleanup(); /* actual work */
      signal(signo, SIG_DFL); /* restore previous behavior */
      raise(signo); /* deliver signal, killing ourselves */
    
    For a single handler, this works fine. However, if we want
    to clean up two _different_ things, we run into a problem.
    The most recently installed handler will run, but when it
    removes itself as a handler, it doesn't put back the first
    handler.
    
    This patch introduces sigchain, a tiny library for handling
    a stack of signal handlers. You sigchain_push each handler,
    and use sigchain_pop to restore whoever was before you in
    the stack.
    
    Signed-off-by: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Something went wrong with that request. Please try again.