Skip to content

Match Restart Manager process-info buffers and array stride to the Windows SDK #690

Closed

Description

Resolution

Resolved in the current draft PR #619 source at c9343908. Actual managed and installed Windows SDK RED/GREEN, exact owned multi-holder PID controls, all sixteen Unity-reference compilations and all three new regressions across all four supported native Editor versions pass. Full prior default inventories, both performance scopes, all standard workflows and cleanup qualify. Final evidence and scope. The historical #680 empty-owner cause remains unassigned. This closure does not claim a merged or published release.

Source observation

Failing parent57da Tests/Editor/EditorSettingsStateScope.cs declares ProcessInfo.ApplicationName with257UTF-16characters and ServiceName with65, and accepts Marshal.SizeOf=672. Microsoft’s primary RestartManager.h defines CCH_RM_MAX_APP_NAME255/CCH_RM_MAX_SVC_NAME63 and arrays of constant+1:256and64. The documented scalar layout yields668bytes. This shifts later fields and array records. The existing owned exclusive-file control and completed52mode study each exercise a single known holder, so they do not validate decoding the second record.

Primary sources: Microsoft SDK header, RM_PROCESS_INFO, Microsoft P/Invoke example.

This is a diagnostic decoding defect. It does not explain #680’s historical RmGetList needed=returned=0 or identify a file-lock owner. Preserve all original failures and completed study verdicts within their single-holder scope.

Prospective RED/GREEN protocol

Before changing the observer, compile/exercise the actual current class and retain managed sizes/field offsets against the primary SDK shape. Add a shared regression that rejects the current672-byte/shifted layout. On an isolated Windows-owned-file experiment, use the installed SDK/compiler to record native sizeof/offsetof values, and actual0/1/2/3owned holder processes with explicit ready/stop handshakes. Query ONLY the owned temporary resource; compare exact PID sets. Original single-holder cases are controls. Retain original observer bytes and all old results. No global process/handle inventory, permission, service, security, primary Unity, user-file or source-operation retry work.

Implement the smallest buffer/expected-size correction only after RED. Preserve original exception/control/restoration behavior and query/session cleanup. Add managed layout and multiple-holder regression coverage using the production observer; children must be owned, bounded and confirmed exited. No sleeps, timeout raises, skipped cases or polling-to-green. Require practical copied-Unity-reference compilation, focused and affected checks, one prospective Windows comparison with SDK/owned-process controls, and fresh supported native Editor/full scope qualification before closure. Stop on source/SDK/control/process/transport/cleanup drift; no identical retry.

The prepared #680temporal branches have never run. Defer their admission until this newly found observer defect is qualified; any later source/classifier/expectation amendments must be declared before the ONE temporal native observation, with original case/exception predicates retained. Do not dispatch the known wrong observer. Use existing draft619, aggregate after current MainCI cleanup; no extra PR. Evidence: .artifacts/session482/restart-manager-layout/.

Activity

  1. wallstop commented on Oct 27, 2026

    @wallstop
    CollaboratorAuthor

    Before Windows observations, local actual-production RED/GREEN is retained. The same new NUnit layout method invokes the real observer type: oldsource672fails expected668; the minimal3literal correction passes, with all7field offsets exact and0mismatches versus6original. All16actual copied-Unity-reference assembly compilations pass. Shared0/1/2/3owned child-process ready/stop/cleanup logic also executes locally; that is not a Windows sharing claim. Production-only commit c93439089d33f910f2caa95559b6893aea9230aa changes only the existing Editor fixture/helper file; full production validation/spelling and normal hooks pass.

    Research descendant 10890a0592245b5ea83648cfee591fd162811db7 replaces only the research RunnerBootstrap workflow with one Windows-hosted SDK/owned-process comparison. Runtime/source tests otherwise exact; research workflow NEVERintegrates. Its intentional non-Unity role yields4unchanged canonical-version-consumer findings; these remain retained rather than adding fake version literals or weakening the validator. Workflow syntax/YAML/format/spelling/normal hooks pass. This does not claim whole-researchbranchCIgreen.

    Frozen Windows admissionSHA fbb78e048f291e9ee4d30a945ac7b8f4e43e8a642934fef4b11bb15e65d68ebc: all physical source/analysis/local-evidence hashes and exact normalized old/new observer bodies.19synthetic classifier controls pass. ONEaccepted Windows run may compile installed SDKsizeof/offsetof and query the same0/1/2/3owned holder sets with both exact production classes. Require actual32denial for held files, exact candidate PID sets, old0/1controls pass and old2/3RED, all cleanup/source/transport/SDK gates. Any defect stops inconclusive without identical retry. No Unity/primary project/permission/service/global handle action or historical empty-owner attribution. No Windows result yet.

  2. wallstop commented on Oct 27, 2026

    @wallstop
    CollaboratorAuthor

    ONEWindows comparison qualifies: run40578802514/job122452413721 at exact10890a05, artifact12769040954/9members. The installed SDK/compiler reports256/64characters, UniqueProcess12/ProcessInfo668and exact offsets0/12/524/652/656/660/664. Both production classes share the SAMElive owned0/1/2/3holder sets. Oldobserver passes0/1controls and misdecodes2/3; correctedobserver returns every exact expected PID in all4rows. Held cases prove actualDeleteIOException32; all owned children/temporary directories confirm cleanup. Frozen19-control analysis verdict QUALIFIED_SDK_ABI_AND_MULTIPLE_OWNED_HOLDERS, receiptSHA 996a9a4d61732416929bfcb60bd8fcec2708896f5bd5718476082522dd4e77b4.

    This proves the fixed array-stride defect on Windows/.NET with actual SDK fields; it does not explain historical empty owner lists or identify the #680holder. Old52single-holder observations remain within their original scope. StudyCOMPLETE/STOPPED/no identicalretry. Production-only c9343908changes one existingEditorfixture/helper file (buffer/expected-size correction plus layout and2/3holder regressions); researchworkflow must not integrate. Fresh supported UnityMono/full default scope qualification remains required before closure. Parent57daall8standard/full14archives120members now qualifies; integrate this one-file correction into existing draft619 and keep all unrelated release gates open.

  3. wallstop commented on Oct 27, 2026

    @wallstop
    CollaboratorAuthor

    Fresh supported Unity 2021 qualification passes at production-only c9343908, run40579736225/job122455656008 on ELI. All three new actual SDK-layout/two-holder/three-holder regressions PASS: Editor1,031 =1,016PASS/15unchanged skips. Every prior Editor case/outcome is preserved. Mono27,793 and IL2CPP27,789 cases pass, including all48configuration regressions at ten valid cycles and324controls. All three archives/13members, source/process identity and four cleanup gates qualify. ReceiptSHA256 b61a484966d97aa0bc7bb47004ea16df25276c40dd0ffcca26a7ebee4e6e4f7e. Artifact processing finishes in38seconds under the original120second cap. Unity2022/6.3/6.5 and both performance scopes remain pending. No historical file-lock cause or release-readiness claim.

  4. wallstop commented on Oct 27, 2026

    @wallstop
    CollaboratorAuthor

    All declared acceptance gates now pass at c9343908. The actual old NUnit layout method is retained RED672versus668 and corrected GREEN; the installed SDK/owned0/1/2/3holder comparison retains oldmultiple-holder RED and corrected exact PIDs. All16copied-reference compilations pass. All three new regressions pass on every supported native Editor version, with every prior case/outcome, full Runtime scopes, standard checks and cleanup qualified. Final current-source evidence. Closing this diagnostic defect as resolved in draft619 source. #680 historical lock attribution stays open; no file-operation workaround or release-readiness claim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions