1. 16 Dec, 2015 1 commit
  2. 22 Jan, 2009 2 commits
    • Jeff King's avatar
      refactor signal handling for cleanup functions · 57b235a4
      Jeff King authored
      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: default avatarJeff King <peff@peff.net>
      Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
      57b235a4
    • Jeff King's avatar
      chain kill signals for cleanup functions · 4a16d072
      Jeff King authored
      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: default avatarJeff King <peff@peff.net>
      Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
      4a16d072