diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-11-17 13:57:58 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-11-17 13:57:58 -0800 |
commit | 5a7a0fae8f964b5ad179018d6a50f25ef7550f97 (patch) | |
tree | 126f1390f83cbddc7b67b70f25348b282944a772 /Documentation/technical | |
parent | d6b634fafdb5570d9c25d5176d3d32fe0b22530d (diff) | |
parent | 1c7d402b3e1e9d7e50abfbfb18c88bc79be468ea (diff) | |
download | git-5a7a0fae8f964b5ad179018d6a50f25ef7550f97.tar.gz git-5a7a0fae8f964b5ad179018d6a50f25ef7550f97.tar.xz |
Merge branch 'maint'
* maint:
clean: remove redundant variable baselen
Documentation/git-pull: clarify configuration
Document that rev-list --graph triggers parent rewriting.
clean: avoid quoting twice
document sigchain api
Keep together options controlling the behaviour of diffcore-rename.
t3402: test "rebase -s<strategy> -X<opt>"
Diffstat (limited to 'Documentation/technical')
-rw-r--r-- | Documentation/technical/api-sigchain.txt | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Documentation/technical/api-sigchain.txt b/Documentation/technical/api-sigchain.txt new file mode 100644 index 000000000..535cdff16 --- /dev/null +++ b/Documentation/technical/api-sigchain.txt @@ -0,0 +1,41 @@ +sigchain API +============ + +Code often wants to set a signal handler to clean up temporary files or +other work-in-progress when we die unexpectedly. For multiple pieces of +code to do this without conflicting, each piece of code must remember +the old value of the handler and restore it either when: + + 1. The work-in-progress is finished, and the handler is no longer + necessary. The handler should revert to the original behavior + (either another handler, SIG_DFL, or SIG_IGN). + + 2. The signal is received. We should then do our cleanup, then chain + to the next handler (or die if it is SIG_DFL). + +Sigchain is a tiny library for keeping a stack of handlers. Your handler +and installation code should look something like: + +------------------------------------------ + void clean_foo_on_signal(int sig) + { + clean_foo(); + sigchain_pop(sig); + raise(sig); + } + + void other_func() + { + sigchain_push_common(clean_foo_on_signal); + mess_up_foo(); + clean_foo(); + } +------------------------------------------ + +Handlers are given the typdef of sigchain_fun. This is the same type +that is given to signal() or sigaction(). It is perfectly reasonable to +push SIG_DFL or SIG_IGN onto the stack. + +You can sigchain_push and sigchain_pop individual signals. For +convenience, sigchain_push_common will push the handler onto the stack +for many common signals. |