diff options
author | eadler <eadler@FreeBSD.org> | 2013-05-10 18:43:36 +0000 |
---|---|---|
committer | eadler <eadler@FreeBSD.org> | 2013-05-10 18:43:36 +0000 |
commit | 9f34a8fbd1042ff5b6aacf0953a19839a9d2f7b5 (patch) | |
tree | 70263e024132ba7c7573919f9f71f2103a1f1d06 /bin/dd/dd.c | |
parent | 6ea39edf934cff6ee443d1e0447b0081574612e5 (diff) | |
download | FreeBSD-src-9f34a8fbd1042ff5b6aacf0953a19839a9d2f7b5.zip FreeBSD-src-9f34a8fbd1042ff5b6aacf0953a19839a9d2f7b5.tar.gz |
Make dd's signal handler async safe.
PR: bin/75258
Submitted by: "Oleg V. Nauman" <oleg@reis.zp.ua>
Arrival Date: Sun Dec 19 14:50:21 GMT 2004
Reviewed by: mjg, jhb
Reviewed by: jilles (earlier version)
MFC after: 1 week
Diffstat (limited to 'bin/dd/dd.c')
-rw-r--r-- | bin/dd/dd.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/bin/dd/dd.c b/bin/dd/dd.c index 9d0f9b1..7e5bd91 100644 --- a/bin/dd/dd.c +++ b/bin/dd/dd.c @@ -81,6 +81,7 @@ size_t cbsz; /* conversion block size */ uintmax_t files_cnt = 1; /* # of files to copy */ const u_char *ctab; /* conversion table */ char fill_char; /* Character to fill with if defined */ +volatile sig_atomic_t need_summary; int main(int argc __unused, char *argv[]) @@ -89,7 +90,7 @@ main(int argc __unused, char *argv[]) jcl(argv); setup(); - (void)signal(SIGINFO, summaryx); + (void)signal(SIGINFO, siginfo_handler); (void)signal(SIGINT, terminate); atexit(summary); @@ -375,6 +376,9 @@ dd_in(void) in.dbp += in.dbrcnt; (*cfunc)(); + if (need_summary) { + summary(); + } } } |