Phase 5(b) fix: InvocationMarshaller explicit streaming preserves _invdir

The flatten-mode codegen gave each *Marshaller subclass a self-contained
read/writeObject, which overrode InvocationMarshaller.readObject and thus
skipped its side-effect of binding the transient _invdir from the stream's
client -> null _invdir -> NPE on the first invocation request (hit by ART
AND HotSpot clients). Fix: give InvocationMarshaller explicit read/writeObject
(GenStreamUtil, deterministic order, byte-identical to the old reflective
default) that keeps the _invdir binding; field-free subclasses inherit it.
narya 1.22.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhfHCXYp2ctWi76Z91y9Ut
This commit is contained in:
2026-07-05 22:10:13 +12:00
parent 9ea7ecf9ee
commit 7cbac80172
4 changed files with 27 additions and 5 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
<groupId>com.threerings</groupId>
<artifactId>narya-parent</artifactId>
<packaging>pom</packaging>
<version>1.21</version>
<version>1.22</version>
<name>Narya Parent</name>
<description>Facilities for making networked multiplayer games.</description>