Functions down the line should be able to fail and return a status.
They can be called either through IPC or directly depending on compile settings,
therefore we need an internal result type for various XR_ERROR_* errors, but also IPC failure.
For now functions in ipc_client_utils.c only return XRT_SUCCESS or XRT_ERROR_IPC_FAILURE.
If there is no IPC failure, the generated protocol will extract and return the called functions'
actual return value from the reply.
v2: make failure results negative
When multiple threads call OpenXR functions, make sure one thread
can not read the reply meant for another thread.
Unfortunately this also blocks other OpenXR functions from being
called while xrWaitFrame() is blocking.
The service considers clients to be connected as long as the fd is not closed.
After destroying an XrInstance this prevents the client from creating a subsequent XrInstance.