Cut core/wire and shell/persist comment bloat ~46% (comments only, zero code change)
This commit is contained in:
@@ -12,11 +12,6 @@ namespace {
|
||||
|
||||
constexpr const char* kMagic = "rsusage1";
|
||||
|
||||
// The shared core/wire codec (Q-W1, T2-01b) — one grammar across every
|
||||
// ext-state seam. The former local fieldCount (10-digit cap) is subsumed by the
|
||||
// codec's fieldSizeT (20-digit cap + overflow-guarded accumulate): every count
|
||||
// the old cap accepted decodes identically, and any larger count is rejected by
|
||||
// the count-vs-wire-size sanity bound at the call site below.
|
||||
using wire::putField;
|
||||
using Cursor = wire::Cursor;
|
||||
|
||||
@@ -65,31 +60,20 @@ std::optional<UsageRecord> decodeUsageRecord(const std::string& wire) {
|
||||
UsagePublishPlan planUsagePublish(const std::optional<std::string>& existing,
|
||||
const UsageRecord& mine) {
|
||||
UsagePublishPlan plan;
|
||||
// The written form of "just mine": mine's identity + holds, unioned=false (the plan
|
||||
// computes the flag; a sole-writer record is un-poisoned).
|
||||
UsageRecord cleanMine = mine;
|
||||
cleanMine.unioned = false;
|
||||
plan.wire = encodeUsageRecord(cleanMine);
|
||||
|
||||
if (!existing || existing->empty()) {
|
||||
// Fresh key — write mine.
|
||||
return plan;
|
||||
return plan; // fresh key — write mine
|
||||
}
|
||||
|
||||
const std::optional<UsageRecord> theirs = decodeUsageRecord(*existing);
|
||||
if (!theirs) {
|
||||
// Undecodable existing value under MY key: corruption (a sibling sharing
|
||||
// this key via copy always writes decodable records). REMINT rather than
|
||||
// overwrite: writing mine over the corrupt key would clear the prune-side
|
||||
// abort, but a same-key sibling B's holds would then be unprotected until
|
||||
// B publishes again. Leaving the corrupt key in place keeps the prune-side
|
||||
// abort firing (foldUsageRecords.abortPrune) so the window where B's holds
|
||||
// might be unprotected can never resolve toward delete. Mine is published
|
||||
// under the new key that remint produces.
|
||||
// NOTE (>16 MB gap): readReasamplerExtState returning nullopt for a value
|
||||
// larger than 16 MB is indistinguishable from "absent" at the publish site;
|
||||
// that narrow case takes the fresh-write branch above rather than remint.
|
||||
// Both outcomes are safe (fresh write is also correct for a truly absent key);
|
||||
// the gap is documented in the header's fail-safe list.
|
||||
// Corrupt value under my key: remint rather than overwrite. Overwriting
|
||||
// would clear the prune-side abort currently protecting a same-key
|
||||
// sibling's (possibly unprotected) holds; leaving the corrupt key in
|
||||
// place keeps that abort firing until the sibling republishes.
|
||||
plan.remint = true;
|
||||
return plan;
|
||||
}
|
||||
@@ -98,21 +82,16 @@ UsagePublishPlan planUsagePublish(const std::optional<std::string>& existing,
|
||||
!mine.ownerNonce.empty() && theirs->ownerNonce == mine.ownerNonce;
|
||||
|
||||
if (nonceMatch && !theirs->unioned) {
|
||||
// Exactly THIS incarnation wrote the key (the per-lifetime nonce is the exact
|
||||
// ownership proof — a same-track sibling's byte-identical hold set can NOT pass
|
||||
// this test, its nonce differs) AND no other writer has ever unioned into it,
|
||||
// so the content is provably all mine. Clean replace: released holds drop.
|
||||
// Exactly this incarnation wrote the key last and it was never unioned
|
||||
// by another writer — content is provably all mine.
|
||||
if (plan.wire == *existing) plan.skipWrite = true; // idle reload tick
|
||||
return plan;
|
||||
}
|
||||
|
||||
if (theirs->trackGuid == mine.trackGuid || (nonceMatch && theirs->unioned)) {
|
||||
// A foreign writer on MY OWN track (a same-track copy-sibling, or my own
|
||||
// last-session record — indistinguishable by construction), or a record I
|
||||
// wrote last but that carries unioned holds from an earlier multi-writer
|
||||
// merge. Either way no hold in it may be dropped by me — union, existing-
|
||||
// first, de-duped, and the record is (or stays) POISONED unioned=true so no
|
||||
// future nonce-matching write can clean-replace a sibling's holds away.
|
||||
// Same-track sibling, my own last-session record, or an already-unioned
|
||||
// record — no hold in it may be dropped. Union, existing-first, de-duped,
|
||||
// poisoned unioned=true so a future clean replace can never drop it.
|
||||
UsageRecord merged;
|
||||
merged.trackGuid = mine.trackGuid;
|
||||
merged.ownerNonce = mine.ownerNonce;
|
||||
@@ -126,18 +105,16 @@ UsagePublishPlan planUsagePublish(const std::optional<std::string>& existing,
|
||||
if (!dup) merged.holds.push_back(h);
|
||||
}
|
||||
if (theirs->unioned && merged.holds == theirs->holds) {
|
||||
// Already poisoned and the union adds nothing — the write would flip only
|
||||
// the ownerNonce. Skip the redundant ext-state churn. (A false->true
|
||||
// unioned flip is NEVER skipped: it is the poison that protects the other
|
||||
// writer's holds from the last writer's future clean replace.)
|
||||
// Already poisoned and the union adds nothing -> the write would only
|
||||
// flip ownerNonce; skip. A false->true unioned flip is NEVER skipped.
|
||||
plan.skipWrite = true;
|
||||
}
|
||||
plan.wire = encodeUsageRecord(merged);
|
||||
return plan;
|
||||
}
|
||||
|
||||
// Foreign value from ANOTHER track: this instance is a cross-track copy (or was
|
||||
// moved). Take a fresh identity; never overwrite the other's record.
|
||||
// Foreign value from another track: a cross-track copy or move. Fresh
|
||||
// identity; never overwrite the other's record.
|
||||
plan.remint = true;
|
||||
return plan;
|
||||
}
|
||||
@@ -175,16 +152,11 @@ UsageFoldResult foldUsageRecords(
|
||||
records.reserve(decoded.size());
|
||||
for (const std::optional<UsageRecord>& rec : decoded) {
|
||||
if (!rec) {
|
||||
// A present-but-unreadable record: it may protect ANYTHING, so the prune
|
||||
// must halt outright. Belt-and-braces: return the PROTECT-ALL set (all
|
||||
// readable records' paths) so the fail-safe holds even under a future
|
||||
// caller that forgets to check abortPrune before using heldPaths. The
|
||||
// abort flag is still the authoritative signal; heldPaths is the
|
||||
// maximum-protection fallback.
|
||||
// Present-but-unreadable record: it may protect anything, so halt.
|
||||
// Belt-and-braces: also return the protect-all set (every readable
|
||||
// record's paths, bypassing the liveness filter) so the fail-safe
|
||||
// holds even if a future caller forgets to check abortPrune first.
|
||||
result.abortPrune = true;
|
||||
// Collect EVERY path from EVERY readable record, bypassing the liveness
|
||||
// filter entirely (on abort the protected set is unknowable, so every
|
||||
// decoded hold must be included regardless of track-guid membership).
|
||||
std::unordered_set<std::string> seen;
|
||||
for (const std::optional<UsageRecord>& r : decoded) {
|
||||
if (!r) continue;
|
||||
@@ -214,19 +186,11 @@ bool identityMatches(const std::string& identity, const std::string& uidHexUpper
|
||||
const std::string& outputNameUpper) {
|
||||
if (identity.empty()) return false;
|
||||
const std::string up = toUpperAscii(identity);
|
||||
// Primary: the 32-hex class UID embedded in REAPER's fx_ident rendering. Not
|
||||
// guaranteed on every platform/REAPER build (byte-order of the rendered FUID vs
|
||||
// REAPER's hex is unverified on Windows COM layout), hence the two name nets below
|
||||
// — and the protect-all fold above them (see usageHeldPaths).
|
||||
// Class-UID byte-order in fx_ident is unverified on Windows COM layout,
|
||||
// hence the two name fallbacks below (see header for the protect-all net).
|
||||
if (!uidHexUpper.empty() && up.find(uidHexUpper) != std::string::npos) return true;
|
||||
// The module filename base ("REASAMPLER_9000") — fx_ident carries the .vst3 module
|
||||
// path, so this is the alternative that works in the common case (the display name
|
||||
// "REASAMPLER 9000", space-separated, can never match the filename form).
|
||||
if (!outputNameUpper.empty() && up.find(outputNameUpper) != std::string::npos)
|
||||
return true;
|
||||
// The factory display name — matches original_name / renamed-instance renderings.
|
||||
// Beta-substring over-protect is deliberate (see the header note): stable needles
|
||||
// are substrings of beta ones, widening protection only — never a delete.
|
||||
return !nameUpper.empty() && up.find(nameUpper) != std::string::npos;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user