forked from 1b-agent/opencadstudio-upstream
fix: close the review findings on the last web wave
Full verification of the XREF/data/ARCHIVE/worker wave (three reviewers, one forensic) found no blockers and no crossfire damage; five majors and several minors are fixed here. - ARCHIVE now packages XREFs: the bytes registry added by the same commit is consulted (the in-code 'no xref store exists' comment was false within the commit), and the drawing is packaged only after the full save preparation — without it kernel solids shipped without their ACIS data. - PendingClose stores the stable tab id instead of a vector index: the web save now completes asynchronously, and closing a lower tab during the serialization window shifted indices — closing the WRONG tab, or panicking on a stale one. All producers and consumers resolve the id at use. - The xref bytes registry is capped (6 entries, oldest evicted): every open, drop, and pick registered full drawing bytes with no bound — an OOM waiting to happen. Reopened recents register too, so any entry path can serve as another drawing's xref. - A re-picked data-link source with the same name but different bytes no longer silently replaces the first (the browser hands back bare names, so two same-named files collided and every reference read the newer pick): the pick is refused and the user is told why. - The unresolved-xref warning lists file names (what to drop on the page), not internal block names; the ZIP writer refuses the ZIP64 sentinel values (0xFFFF counts, 0xFFFFFFFF sizes/offsets) instead of emitting archives that send strict readers hunting for a ZIP64 EOCD that is absent; docs note the worker-side saves. Known follow-ups documented, not fixed here: the serde-skipped ExtendedEntity/CadDocument raw bytes still drop on worker crossings (needs acadrust accessors — upstream), and WBLOCK/SAVEALL/ARCHIVE still serialize inline (the worker route is a small follow-up).
This commit is contained in:
1 parent
2e1006348b
commit
6f429f2416
13 files changed
+182
-42
No files matched your search
+4
-2
@@ -1298,8 +1298,10 @@ pub(super) struct OpenCADStudio {
|
||||
/// What triggered the "unsaved changes" dialog.
|
||||
#[derive(Debug, Clone)]
|
||||
pub(super) enum PendingClose {
|
||||
/// User tried to close the tab at this index.
|
||||
Tab(usize),
|
||||
/// User tried to close this tab — stored as the stable tab id, because
|
||||
/// the web save completes asynchronously and removing an earlier tab in
|
||||
/// the meantime shifts every later vector index.
|
||||
Tab(u64),
|
||||
/// User tried to quit the application.
|
||||
Quit,
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user