| Previous | Next |
| RTC_E_CLIENT_NOT_INITIALIZED | RTC_E_CLIENT_ALREADY_SHUT_DOWN |
RTC_E_CLIENT_ALREADY_INITIALIZED
Operational meaning: RTC_E_CLIENT_ALREADY_INITIALIZED
The useful interpretation of this result is narrower than “SIP error”; within initialization, shutdown, platform support, and global client-object configuration, it means code attempted to initialize an RTC client instance that is already active.
The stored value is 0x80EE0026 in the RTC interface facility 0xEE; keep both forms in telemetry so COM error wrapping does not erase whether RTC produced an interface result, mapped a SIP response, or surfaced a PINT outcome.
Collect enough state to identify both initialization owners and compare event sinks, versions, and flags; the result evidence should demonstrate why reinitialization is not a harmless refresh and can break ownership of existing child objects.
Signals worth preserving
- Code-specific proof: identify both initialization owners and compare event sinks, versions, and flags.
- Correlation key: Initialize and Shutdown call order.
- Protocol or object snapshot: thread/apartment and event sink.
- Last completed transition: outstanding session/profile count.
- Expected output: OS and rtcdll.dll version.
Recovery and control flow
To correct this, centralize lifecycle ownership and reuse the initialized client.
A retry after this result is safe only after the prior transaction’s outcome is reconciled; after it, reissuing state-changing requests while the peer result is unknown can create contradictory RTC state.
Example: Two application modules each assume responsibility for initializing the shared RTC object.
Protocol and object state
| RTC area | RTC client lifecycle |
|---|---|
| Condition to prove | code attempted to initialize an RTC client instance that is already active |
| Objects to correlate | IRTCClient instance, initialization generation, shutdown state, event sink, platform capability |
| Safe corrective direction | centralize lifecycle ownership and reuse the initialized client |
RTC Client API objects are stateful COM objects; child sessions and profiles belong to the client instance that created them. A shutdown transition invalidates pending operations even if application code still holds interface pointers.
Verification workflow
- Collect enough evidence to identify both initialization owners and compare event sinks, versions, and flags.
- Test the competing explanation explicitly, because reinitialization is not a harmless refresh and can break ownership of existing child objects.
- Apply the targeted fix — centralize lifecycle ownership and reuse the initialized client — and validate both protocol completion and object cleanup.
Actions that do not address this condition
- Do not hide lifecycle bugs by repeatedly constructing new clients inside a retry loop.
- Do not reuse child objects after shutdown or reinitialization.
Do not confuse it with
RTC_E_MAX_PENDING_OPERATIONS | the RTC client reached its cap on concurrent asynchronous operations |
|---|---|
RTC_E_CLIENT_NOT_INITIALIZED | an RTC method was called before the client completed initialization |
RTC_E_INVALID_OBJECT_STATE | the targeted RTC object is alive but not in a state that permits this method |
Technical references
Looking for a different code? Search another status or error code.