lnd/discovery
Matt Morehouse 21588acb3d
discovery: fix gossiper shutdown deadlock
When processing a remote network announcement, it is possible for two
error messages to be sent back on the errChan.  Since Brontide doesn't
actually read from errChan, and since errChan only buffered one error
message, the sending goroutine would deadlock forever.  This would only
become apparent when the gossiper attempted to shut down and got hung
up.

For now, we can fix this simply by buffering up to two error messages on
errChan.  There is an existing TODO to restructure this logic entirely
to use the actor model, and we can do a more thorough fix as part of
that work.

This bug was discovered while doing full node fuzz testing and was
triggered by sending a specific channel_announcement message and then
shutting down LND.
2026-02-03 09:14:56 -06:00
..
ban.go multi: allow disable banning peers 2025-08-04 15:46:16 +08:00
ban_test.go discovery: pass banThreshold to banman 2025-08-04 15:44:35 +08:00
bootstrapper.go autopilot: fix nil map assignment 2025-09-18 07:37:53 +02:00
chan_series.go multi: remove HaveNodeAnnouncement field from Node 2025-11-12 22:54:04 +08:00
gossiper.go discovery: fix gossiper shutdown deadlock 2026-02-03 09:14:56 -06:00
gossiper_test.go discovery: fix gossiper shutdown deadlock 2026-02-03 09:14:56 -06:00
log.go multi: start updating various loggers to use the new v2 type 2024-10-22 17:03:55 +02:00
message_store.go multi: rename ChannelUpdate to ChannelUpdate1 2024-09-18 16:13:17 +02:00
message_store_test.go multi: rename chan DB Open method to OpenForTesting 2024-11-28 13:51:15 +02:00
mock_test.go discovery: implement ChannelAnnouncement banning 2024-08-27 14:11:06 -04:00
reliable_sender.go discovery: revert passing ctx through to Start methods 2025-05-22 14:14:39 +02:00
reliable_sender_test.go multi: context.Background() -> t.Context() 2025-08-30 14:13:44 -03:00
sync_manager.go multi: add new config peer-msg-rate-bytes 2025-09-02 21:23:07 +08:00
sync_manager_test.go discovery: create common helper methods for rate limiter 2025-09-02 21:13:46 +08:00
syncer.go discovery: fix endless loop in gossip syncer on context cancellation 2025-11-03 10:44:12 -08:00
syncer_atomic_test.go discovery: rate limiting sending msgs per peer 2025-09-02 21:23:07 +08:00
syncer_queue_test.go discovery: add tests for for async timestamp range queue 2025-08-01 11:20:22 -05:00
syncer_test.go discovery/test: add comprehensive tests for state handler error exits 2025-11-03 10:44:13 -08:00
validation_barrier.go multi: rename lnwire.NodeAnnouncement 2025-10-01 13:13:32 +02:00
validation_barrier_test.go multi: rename lnwire.NodeAnnouncement 2025-10-01 13:13:32 +02:00