mirror of
https://github.com/isc-projects/bind9.git
synced 2026-03-09 09:40:45 -04:00
I was truncating zone files for experimental purposes when I found
that `named-compilezone | head` got stuck. The full command line that
exhibited the problem was:
dig axfr dotat.at |
named-compilezone -o /dev/stdout dotat.at /dev/stdin |
head
This requires a large enough zone to exhibit the problem, more than
about 70000 bytes of plain text output from named-compilezone.
I was running the command on Debian Stretch amd64.
This was puzzling since it looked like something was suppressing the
SIGPIPE. I used `strace` to examine what was happening at the hang.
The program was just calling write() a lot to print the zone file, and
the last write() hanged until I sent it a SIGINT.
During some discussion with friends, Ian Jackson guessed that opening
/dev/stdout O_RDRW might be the problem, and after some tests we found
that this does in fact suppress SIGPIPE.
Since `named-compilezone` only needs to write to its output file, the
fix is to omit the stdio "+" update flag.
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| win32 | ||
| .gitignore | ||
| check-tool.c | ||
| check-tool.h | ||
| Makefile.in | ||
| named-checkconf.8 | ||
| named-checkconf.c | ||
| named-checkconf.docbook | ||
| named-checkconf.html | ||
| named-checkzone.8 | ||
| named-checkzone.c | ||
| named-checkzone.docbook | ||
| named-checkzone.html | ||