Updated with desktop shared memory allocated in a global session mapping. For simplicity all objects are placed in a session_object union, which is the only allocation granularity.
The session mapping is reallocated as needed, copying valid objects and marking all objects in the old session as invalid. Clients would read the invalid flags, discard their stale session mapping and request the new one.
I updated the https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories branch with this approach applied to the other object types.