Skip to content

Commit b8f75bb

Browse files
committed
pager: use cleanup api
Note that we're replacing a push/pop pair here. I think this is OK because when we pop we also set old_fd to -1, which the handlers already use to return early.
1 parent 98b1d11 commit b8f75bb

1 file changed

Lines changed: 9 additions & 17 deletions

File tree

pager.c

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "run-command.h"
66
#include "sigchain.h"
77
#include "alias.h"
8+
#include "cleanup.h"
89

910
int pager_use_color = 1;
1011

@@ -36,21 +37,12 @@ static void finish_pager(void)
3637
finish_command(&pager_process);
3738
}
3839

39-
static void wait_for_pager_atexit(void)
40-
{
41-
if (old_fd1 == -1)
42-
return;
43-
44-
finish_pager();
45-
}
46-
4740
void wait_for_pager(void)
4841
{
4942
if (old_fd1 == -1)
5043
return;
5144

5245
finish_pager();
53-
sigchain_pop_common();
5446
unsetenv("GIT_PAGER_IN_USE");
5547
dup2(old_fd1, 1);
5648
close(old_fd1);
@@ -62,15 +54,17 @@ void wait_for_pager(void)
6254
}
6355
}
6456

65-
static void wait_for_pager_signal(int signo)
57+
static void wait_for_pager_cleanup(int signo)
6658
{
6759
if (old_fd1 == -1)
6860
return;
6961

70-
close_pager_fds();
71-
finish_command_in_signal(&pager_process);
72-
sigchain_pop(signo);
73-
raise(signo);
62+
if (signo) {
63+
close_pager_fds();
64+
finish_command_in_signal(&pager_process);
65+
} else {
66+
finish_pager();
67+
}
7468
}
7569

7670
static int core_pager_config(const char *var, const char *value,
@@ -182,11 +176,9 @@ void setup_pager(struct repository *r)
182176
}
183177
close(pager_process.in);
184178

185-
sigchain_push_common(wait_for_pager_signal);
186-
187179
if (!once) {
188180
once++;
189-
atexit(wait_for_pager_atexit);
181+
cleanup_register(wait_for_pager_cleanup);
190182
}
191183
}
192184

0 commit comments

Comments
 (0)