75 lines
3.6 KiB
Diff
75 lines
3.6 KiB
Diff
From 8620b35320c38b3b810687d26ba7a72379e41857 Mon Sep 17 00:00:00 2001
|
|
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
Date: Thu, 7 Dec 2023 14:28:12 +0900
|
|
Subject: [PATCH] resolve: do not trigger assertion on exit
|
|
|
|
By making assert_return() critical, we observe the following:
|
|
---
|
|
Program received signal SIGABRT, Aborted.
|
|
0x00007f01320b0884 in __pthread_kill_implementation () from /lib64/libc.so.6
|
|
(gdb) bt
|
|
#0 0x00007f01320b0884 in __pthread_kill_implementation ()
|
|
from /lib64/libc.so.6
|
|
#1 0x00007f013205fafe in raise () from /lib64/libc.so.6
|
|
#2 0x00007f013204887f in abort () from /lib64/libc.so.6
|
|
#3 0x00007f01338d02d6 in log_assert_failed (
|
|
text=0x7f01340009e0 "e->state != SD_EVENT_FINISHED",
|
|
file=0x7f0133fff403 "src/libsystemd/sd-event/sd-event.c", line=1399,
|
|
func=0x7f01340045a0 <__func__.148> "sd_event_add_time")
|
|
at ../src/basic/log.c:948
|
|
#4 0x00007f01338d0457 in log_assert_failed_return (
|
|
text=0x7f01340009e0 "e->state != SD_EVENT_FINISHED",
|
|
file=0x7f0133fff403 "src/libsystemd/sd-event/sd-event.c", line=1399,
|
|
func=0x7f01340045a0 <__func__.148> "sd_event_add_time")
|
|
at ../src/basic/log.c:967
|
|
#5 0x00007f0133c7ed83 in sd_event_add_time (e=0x617000022280,
|
|
ret=0x610000007e98, clock=7, usec=24054941030, accuracy=0,
|
|
callback=0x4625b4 <on_announcement_timeout>, userdata=0x610000007e40)
|
|
at ../src/libsystemd/sd-event/sd-event.c:1399
|
|
#6 0x00007f0133c7f725 in sd_event_add_time_relative (e=0x617000022280,
|
|
ret=0x610000007e98, clock=7, usec=1000000, accuracy=0,
|
|
callback=0x4625b4 <on_announcement_timeout>, userdata=0x610000007e40)
|
|
at ../src/libsystemd/sd-event/sd-event.c:1462
|
|
#7 0x0000000000464cac in dns_scope_announce (scope=0x610000007e40, goodbye=true) at ../src/resolve/resolved-dns-scope.c:1530
|
|
#8 0x0000000000504d08 in link_free (l=0x612000023d40) at ../src/resolve/resolved-link.c:83
|
|
#9 0x000000000052dbbd in manager_free (m=0x619000000a80) at ../src/resolve/resolved-manager.c:697
|
|
#10 0x0000000000562328 in manager_freep (p=0x7f012f800040) at ../src/resolve/resolved-manager.h:198
|
|
#11 0x000000000056315a in run (argc=1, argv=0x7fff22b06468) at ../src/resolve/resolved.c:25
|
|
#12 0x0000000000563284 in main (argc=1, argv=0x7fff22b06468) at ../src/resolve/resolved.c:99
|
|
---
|
|
Prompted by https://github.com/systemd/systemd/pull/30049#issuecomment-1844087965.
|
|
|
|
(cherry picked from commit a4be4ad8abad36ae2ac5c73fc00f4467fbb06404)
|
|
(cherry picked from commit 390e9420e314635a4d9051b8786e15423f58c979)
|
|
(cherry picked from commit 3529defd553b0cfabac7957f956ee9dc69d064b3)
|
|
(cherry picked from commit 8e70e220a66019345b5fca26f60c2822e56d80f3)
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/systemd/systemd/commit/a4be4ad8abad36ae2ac5c73fc00f4467fbb06404
|
|
---
|
|
src/resolve/resolved-dns-scope.c | 8 ++++++++
|
|
1 file changed, 8 insertions(+)
|
|
|
|
diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c
|
|
index 88830fb2c6..4085b01054 100644
|
|
--- a/src/resolve/resolved-dns-scope.c
|
|
+++ b/src/resolve/resolved-dns-scope.c
|
|
@@ -1410,6 +1410,14 @@ int dns_scope_announce(DnsScope *scope, bool goodbye) {
|
|
if (scope->protocol != DNS_PROTOCOL_MDNS)
|
|
return 0;
|
|
|
|
+ r = sd_event_get_state(scope->manager->event);
|
|
+ if (r < 0)
|
|
+ return log_debug_errno(r, "Failed to get event loop state: %m");
|
|
+
|
|
+ /* If this is called on exit, through manager_free() -> link_free(), then we cannot announce. */
|
|
+ if (r == SD_EVENT_FINISHED)
|
|
+ return 0;
|
|
+
|
|
/* Check if we're done with probing. */
|
|
LIST_FOREACH(transactions_by_scope, t, scope->transactions)
|
|
if (DNS_TRANSACTION_IS_LIVE(t->state))
|
|
--
|
|
2.33.0
|
|
|