diff --git a/src/chat/chat_sync.c b/src/chat/chat_sync.c index d46d4f744..64b647c42 100644 --- a/src/chat/chat_sync.c +++ b/src/chat/chat_sync.c @@ -766,9 +766,9 @@ static void cs_feedback_done(uint64_t peer, const char* channel, int result, voi static void _on_member_sync_done(uint64_t peer, const char* ns, int result, void* arg) { struct chat_sync* cs = (struct chat_sync*)arg; - if (result == MT_OK) { + if (result == MT_OK && cs && topo_group_chat_allowed(cs->inst, chat_channel_id(ns), peer)) { cs_resume_db_sync(cs, ns); - if (cs && merkle_sync_start(cs->inst, MT_DATA_FEEDBACK, peer, ns, cs_feedback_done, cs) < 0) + if (merkle_sync_start(cs->inst, MT_DATA_FEEDBACK, peer, ns, cs_feedback_done, cs) < 0) DEBUG_WARN(DEBUG_CATEGORY_CHAT_SYNC, "%s: feedback sync unavailable ch=%s peer=%016llx", CS_ID, ns, (unsigned long long)peer); } DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "%s: member_sync %s ns=%s peer=%016llx", diff --git a/src/chat/merkle_sync.c b/src/chat/merkle_sync.c index 81b633c83..9b0572cbd 100644 --- a/src/chat/merkle_sync.c +++ b/src/chat/merkle_sync.c @@ -770,7 +770,7 @@ int merkle_sync_register(struct UTUN_INSTANCE* inst, uint8_t dataset, const stru struct merkle_sync* ms = inst ? inst->msync : NULL; if (!ms || ms->datasets[dataset].ops || !ops || !ops->update_bucket_hash || !ops->get_page || (!ops->apply_items && !ops->apply_page && !ops->stage_page) || (ops->validate_request && !ops->begin_pull) - || ((ops->begin_pull || ops->commit_pull || ops->abort_pull || ops->stage_page) + || ((ops->begin_pull || ops->commit_pull || ops->abort_pull || ops->stage_page || ops->publish_pull) && !(ops->begin_pull && ops->commit_pull && ops->abort_pull && ops->stage_page))) { DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: invalid dataset registration dataset=%u", dataset); return -1; }