Skip to content

Commit c0be43f

Browse files
HebaWalygitster
authored andcommitted
sigchain: move doc to sigchain.h
Move the documentation from Documentation/technical/api-sigchain.txt to sigchain.h as it's easier for the developers to find the usage information beside the code instead of looking for it in another doc file. Also documentation/technical/api-sigchain.txt is removed because the information it has is now redundant and it'll be hard to keep it up to date and synchronized with the documentation in the header file. Signed-off-by: Heba Waly <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 19ef3dd commit c0be43f

File tree

2 files changed

+45
-41
lines changed

2 files changed

+45
-41
lines changed

Documentation/technical/api-sigchain.txt

Lines changed: 0 additions & 41 deletions
This file was deleted.

sigchain.h

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,57 @@
11
#ifndef SIGCHAIN_H
22
#define SIGCHAIN_H
33

4+
/**
5+
* Code often wants to set a signal handler to clean up temporary files or
6+
* other work-in-progress when we die unexpectedly. For multiple pieces of
7+
* code to do this without conflicting, each piece of code must remember
8+
* the old value of the handler and restore it either when:
9+
*
10+
* 1. The work-in-progress is finished, and the handler is no longer
11+
* necessary. The handler should revert to the original behavior
12+
* (either another handler, SIG_DFL, or SIG_IGN).
13+
*
14+
* 2. The signal is received. We should then do our cleanup, then chain
15+
* to the next handler (or die if it is SIG_DFL).
16+
*
17+
* Sigchain is a tiny library for keeping a stack of handlers. Your handler
18+
* and installation code should look something like:
19+
*
20+
* ------------------------------------------
21+
* void clean_foo_on_signal(int sig)
22+
* {
23+
* clean_foo();
24+
* sigchain_pop(sig);
25+
* raise(sig);
26+
* }
27+
*
28+
* void other_func()
29+
* {
30+
* sigchain_push_common(clean_foo_on_signal);
31+
* mess_up_foo();
32+
* clean_foo();
33+
* }
34+
* ------------------------------------------
35+
*
36+
*/
37+
38+
/**
39+
* Handlers are given the typedef of sigchain_fun. This is the same type
40+
* that is given to signal() or sigaction(). It is perfectly reasonable to
41+
* push SIG_DFL or SIG_IGN onto the stack.
42+
*/
443
typedef void (*sigchain_fun)(int);
544

45+
/* You can sigchain_push and sigchain_pop individual signals. */
646
int sigchain_push(int sig, sigchain_fun f);
747
int sigchain_pop(int sig);
848

49+
/**
50+
* push the handler onto the stack for the common signals:
51+
* SIGINT, SIGHUP, SIGTERM, SIGQUIT and SIGPIPE.
52+
*/
953
void sigchain_push_common(sigchain_fun f);
54+
1055
void sigchain_pop_common(void);
1156

1257
#endif /* SIGCHAIN_H */

0 commit comments

Comments
 (0)