Client RPC causes crash on Quest 3 for failed assertion IsInGameThread()

Hello everyone,

I’m scripting a multiplayer VR app on Quest 3 in which a user hosts a session as a Listen Server and Clients connect to it.
Every user has an avatar that can move its mouth based on the microphone volume input and everyone should be able to see it properly synced.

For this to work, I use a RepNotify float variable that is set to the volume received by the mic (locally in the Character’s owner), and the OnRep function moves the avatar’s mouth. All of the code is in the Player Character Blueprint.

Of course, this works from Server to Clients but not vice versa, because Clients can’t replicate vars to the Server, so each Client should call a RPC event on the Server to set its variable so that the Server can then replicate it to all Clients and thus make everyone see the Client’s Character mouth moving. And in PIE this works fine.

PROBLEM: when launching a packaged build on the Quest 3, the Client very often crashes with this log:

LogAndroid: Error: Assertion failed: IsInGameThread() [File:./Runtime/Engine/Private/NetDriver.cpp] [Line: 6563]

LogAndroid: Error: Attempted to call ProcessRemoteFunction from a thread other than the game thread, which is not supported. Object: /Game/[PROJECT]/Maps/L_PrototypeFirstSpace.L_PrototypeFirstSpace:PersistentLevel.BP_VRCharacter_C_2147481968 Function: SERVER_SyncMouth

I googled it far and wide, without finding any proper solution.

The strange fact is that it sometimes works fine, before crashing.

Thanks for your time.