mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
Five deaths in the split server image raised their own std::abort(). Three of them are funnels - MagmaWireFatal (Renderer/WireFramebuffer.inc), WireDescriptorFatal (Renderer/UniformManager.cpp) and WireBufferLegacyFatal (Renderer/WireDraw.inc) - and the fifteen `@P7` refusals on the tree (8 in UniformManager.cpp, 4 in WireFramebuffer.inc, 2 in WireDraw.inc, 1 in VulkanRenderer.cpp; plan section 1.3's count confirmed) all die through two of them. Every one of those deaths published NO SessionFault frame, so the peer read a bare EOF; bumped NO SessionFaultCount(), so exit gate S8 could neither confirm nor falsify it; and carried a hand-typed family word with no path to FatalFamilies.def's projection. MG_Backend may not name an MG_Remote symbol on its own account, so the route is a seam in MG_Pipe with MGP_TRIP_WIRE_REPORT's shape (PipeApply.cpp:66, and the new code sits beside it): MG_Pipe/PipeSessionFail.h declares MGPipeSessionFail, PipeApply.cpp defines it inside `#if MOBILEGL_BUILD_DISAGGREGATED`, the DEFAULT behaviour is byte-identical to what the three funnels did on their own, and MG_Remote::InstallPipeSessionFailHook() points it at SessionFail. The install is in InitServerRoleCommon (MG_Backend/Init.cpp), step 0, because that is the one function BOTH server roles run - the inproc role and the spawn/TCP session child - so there is no per-transport install to get wrong. MGPipeFatalFamily is a two-value boundary enum, NOT MGFatalFamily cast to an integer: the .def's enumerators are positional and a row inserted in its middle would silently re-point every hook call at a different family. FatalFunnel.cpp's adapter is the one place the two vocabularies meet, as a switch with a named default. The family word stays UnmigratedVerb rather than becoming a new MagmaWireRefusal. Three reasons: the message strings are required to stay byte-identical (5.2), and the retrace refusal censuses recorded since P5b count these deaths by that word - a rename invalidates every `@P7` measurement taken against them; `Magma:` in the detail already separates the Magma arm from the GLES UnmigratedVerb deaths, so a new word adds no discrimination a grep does not have; and its wire projection would be ProtocolCorruption, exactly UnmigratedVerb's. Recorded for the integrator. Ph slice (2) in the same commit: Server/StagedShadow.h's RequireCovered and Server/StagedTextureStore.h's RequireLevelBytes were MGLOG_F + bare abort. Both are inside MG_Remote already, so they call SessionFail directly, message verbatim; check_include_closure.py's four probes do not reach either header and the gate is green. Census: 83 abort sites -> 79 over 20 files (five sites retired, one gained for the seam's no-hook default, which is argued into FUNNEL_SITES), baseline rewritten in this commit - the downward ratchet's notice is what asked for it. Two gate bugs the widening exposed and this commit fixes: the SessionFail call regex also matched `MGPipeSessionFail(` (a lookbehind now), and a funnel's anchor needed a wider window than a marker's (kFunnelAnchorWindow). Red-once, three ways. Pointing MagmaWireFatal back at its own abort reds the census naming WireFramebuffer.inc 0 -> 1. Making the seam skip the hook reds both new death cases - `TheMagmaWireVerbDeathReachesSessionFailAndBumpsTheFaultCount` on the exit code, because it reads SessionFaultCount() out of a SIGABRT handler and gets 0 instead of 1, and `TheSeamHandsTheInstalledHookItsFamilyAndItsLineVerbatim` on the line the hook echoed.
71 lines
2.2 KiB
JSON
71 lines
2.2 KiB
JSON
{
|
|
"abort_sites": 79,
|
|
"abort_sites_by_file": {
|
|
"MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp": 15,
|
|
"MobileGL/MG_Backend/DirectGLES/Managers.cpp": 12,
|
|
"MobileGL/MG_Backend/DirectGLES/MultiDraw.cpp": 2,
|
|
"MobileGL/MG_Backend/DirectGLES/Utils.cpp": 1,
|
|
"MobileGL/MG_Backend/DirectVulkan/DirectVulkan.cpp": 2,
|
|
"MobileGL/MG_Backend/DirectVulkan/Renderer/MagmaPipeArms.h": 1,
|
|
"MobileGL/MG_Backend/DirectVulkan/Renderer/VkBufferManager.cpp": 11,
|
|
"MobileGL/MG_Backend/Init.cpp": 2,
|
|
"MobileGL/MG_Backend/MGPipe/PipeInputs.cpp": 3,
|
|
"MobileGL/MG_Impl/Pipe/PipeFill.cpp": 5,
|
|
"MobileGL/MG_Impl/Pipe/ResourceTracker.h": 5,
|
|
"MobileGL/MG_Impl/Pipe/SlotAllocator.cpp": 2,
|
|
"MobileGL/MG_Pipe/PipeApply.cpp": 4,
|
|
"MobileGL/MG_Pipe/PipeRoute.cpp": 7,
|
|
"MobileGL/MG_Pipe/generated/PipeFilled.inc": 1,
|
|
"MobileGL/MG_Pipe/generated/PipeWire.inc": 1,
|
|
"MobileGL/MG_Remote/FatalFunnel.cpp": 1,
|
|
"MobileGL/MG_Remote/Transport/WireLog.cpp": 1,
|
|
"MobileGL/MG_State/GLState/BufferState/BufferObject.cpp": 2,
|
|
"MobileGL/MG_State/GLState/TextureState/MipmapStorage.cpp": 1
|
|
},
|
|
"families": [
|
|
"ApplyThreadJoinTimeout",
|
|
"ApplyThreadNotRunning",
|
|
"ArchiveEmpty",
|
|
"ArtefactsMissing",
|
|
"BarrierTimeout",
|
|
"BarrierViolation",
|
|
"BlobMissing",
|
|
"ClientTablesUninstalled",
|
|
"ConsumerMaskLie",
|
|
"EventRingOverflow",
|
|
"NoClientSession",
|
|
"PipeLegacyMemosDisabled",
|
|
"PipeVerifyBadKnob",
|
|
"PipeVerifyDiffer",
|
|
"PresentCreditTimeout",
|
|
"ProtocolCorruption",
|
|
"ReadbackDeclined",
|
|
"ReadbackReplyShort",
|
|
"ReplyError",
|
|
"ReplyMismatched",
|
|
"ReplyMissing",
|
|
"ReplyOverrun",
|
|
"ReplyStatusInvalid",
|
|
"ReplyToNoSlot",
|
|
"ReplyTooLarge",
|
|
"ResidualBlockSize",
|
|
"ResourceUnavailable",
|
|
"RetirementWaitFailed",
|
|
"RingOverrun",
|
|
"RoleViolation",
|
|
"StageSnapshotTooNarrow",
|
|
"UncarriedInitialBytes",
|
|
"UnexpectedMapAccept",
|
|
"UnimplementedAdoptTier",
|
|
"UnimplementedClientSession",
|
|
"UnimplementedWritebackWait",
|
|
"UnmigratedEmulation",
|
|
"UnmigratedPipeInput",
|
|
"UnmigratedSurface",
|
|
"UnmigratedVerb",
|
|
"UnnamedIdentity",
|
|
"UnsetCallMask",
|
|
"UnsizedReadback"
|
|
]
|
|
}
|