@@ -1419,10 +1419,12 @@ struct gossmap *gossmap_manage_get_gossmap(struct gossmap_manage *gm)
14191419 written_len = gossip_store_len_written (gm -> gs );
14201420
14211421 if (map_size != written_len ) {
1422- status_broken ("gossmap size %" PRIu64 " != written size %" PRIu64 ,
1423- map_size , written_len );
1424- /* Push harder! */
1425- gossip_store_fsync (gm -> gs );
1422+ status_broken ("gossmap size %" PRIu64 " != written size %" PRIu64
1423+ ": %s mmap!" ,
1424+ map_size , written_len ,
1425+ gossmap_has_mmap (gm -> raw_gossmap )
1426+ ? "disabling" : "ALREADY DISABLED" );
1427+ gossmap_disable_mmap (gm -> raw_gossmap );
14261428 gossmap_refresh (gm -> raw_gossmap );
14271429
14281430 /* Sanity check that we see everything we wrote. */
@@ -1443,12 +1445,22 @@ struct gossmap *gossmap_manage_get_gossmap(struct gossmap_manage *gm)
14431445 remainder_fd = fetch_tail_fd (tmpctx ,
14441446 gossmap_fd (gm -> raw_gossmap ),
14451447 map_used , map_size );
1446- status_failed (STATUS_FAIL_INTERNAL_ERROR ,
1447- "Gossmap failed to process entire gossip_store: "
1448+ status_broken ("Gossmap failed to process entire gossip_store, %s mmap: "
14481449 "at %" PRIu64 " of %" PRIu64 " remaining_mmap=%s remaining_fd=%s" ,
1450+ gossmap_has_mmap (gm -> raw_gossmap )
1451+ ? "disabling" : "ALREADY DISABLED" ,
14491452 map_used , map_size ,
14501453 tal_hex (tmpctx , remainder_mmap ),
14511454 tal_hex (tmpctx , remainder_fd ));
1455+ gossmap_disable_mmap (gm -> raw_gossmap );
1456+ gossmap_refresh (gm -> raw_gossmap );
1457+
1458+ map_used = gossmap_lengths (gm -> raw_gossmap , & map_size );
1459+ if (map_size != map_used ) {
1460+ status_failed (STATUS_FAIL_INTERNAL_ERROR ,
1461+ "Gossmap map_used %" PRIu64 " of %" PRIu64 " with %" PRIu64 " written" ,
1462+ map_used , map_size , written_len );
1463+ }
14521464 }
14531465
14541466 return gm -> raw_gossmap ;
0 commit comments