Browse Source

db_sync: skip SYNC_DONE in count>0 handler when received==0 — breaks bad_sig recv→send loop on client side

topo_upd
Evgeny 2 months ago
parent
commit
3490789249
  1. 6
      src/db_sync.c

6
src/db_sync.c

@ -1049,6 +1049,12 @@ static void db_handle_send_data(struct DB_SYNC_INSTANCE* si, uint64_t src, const
}
uint64_t lch8 = 0; if (mc > 0) db_chain_hash8_at(si, mc - 1, &lch8);
if (received == 0 && resp_count == 0) {
if (sp) { uint32_t nsp = mc > 0 ? mc - 1 : 0; if (sp->synced_pos < nsp) sp->synced_pos = nsp; sp->sync_state = 2; sp->sync_start_tb = 0; }
DEBUG_INFO(DEBUG_CATEGORY_DB_SYNC, "sync [%s:%04llX] → SEND_DATA: 0 new records, skip SYNC_DONE (synced=%u)",
SI_SHRT(si), (unsigned long long)(src >> 16), sp ? sp->synced_pos : 0);
return;
}
uint8_t sd[13];
sd[0] = DB_MSG_SYNC_DONE; memcpy(sd + 1, &mc, 4); memcpy(sd + 5, &lch8, 8);
db_sync_send(si, src, sd, 13);

Loading…
Cancel
Save