summaryrefslogtreecommitdiffstats
path: root/freebsd
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-11 08:13:38 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-12 07:48:02 +0200
commit011f4894e042469507cbe55295415446eaaa7cfe (patch)
tree157c2fb182fbed0b3ee8b3021a2556b7d3ca336b /freebsd
parenttcpdump: Use rtems_task_exit() (diff)
downloadrtems-libbsd-011f4894e042469507cbe55295415446eaaa7cfe.tar.bz2
tcpdump: Close pcap dumper at program exit
Update #4650.
Diffstat (limited to 'freebsd')
-rw-r--r--freebsd/contrib/tcpdump/tcpdump.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/freebsd/contrib/tcpdump/tcpdump.c b/freebsd/contrib/tcpdump/tcpdump.c
index f6f106ce..982a2574 100644
--- a/freebsd/contrib/tcpdump/tcpdump.c
+++ b/freebsd/contrib/tcpdump/tcpdump.c
@@ -1292,6 +1292,13 @@ pcap_loop_wrapper(pcap_t *pd, int cnt, pcap_handler cb, u_char *ud)
}
#define pcap_loop(pd, cnt, cb, ud) pcap_loop_wrapper(pd, cnt, cb, ud)
+
+static void
+destroy_pcap_dumper(void *arg)
+{
+
+ pcap_dump_close(arg);
+}
#endif /* __rtems__ */
int
#ifndef __rtems__
@@ -2148,6 +2155,12 @@ main(int argc, char **argv)
if (Uflag)
pcap_dump_flush(p);
#endif
+#ifdef __rtems__
+ if (rtems_bsd_program_add_destructor(destroy_pcap_dumper, p) ==
+ NULL) {
+ error("cannot add destructor");
+ }
+#endif /* __rtems__ */
} else {
dlt = pcap_datalink(pd);
ndo->ndo_if_printer = get_if_printer(ndo, dlt);