Site icon EfmSoft

What does Windows error code 101 (ERROR_EXCL_SEM_ALREADY_OWNED) mean?

 
Could be also:
ConstantTypeOS
HTTP_STATUS_SWITCH_PROTOCOLSHTTP CodeAny
ENETUNREACHerrnoLinux
ETIMEerrnoMac
EADDRNOTAVAILerrnoWindows
MEMORY1_INITIALIZATION_FAILEDBugCheck CodeWindows
Previous Next
ERROR_TOO_MANY_SEMAPHORES ERROR_SEM_IS_SET

ERROR_EXCL_SEM_ALREADY_OWNED

What ERROR_EXCL_SEM_ALREADY_OWNED means

An exclusive semaphore is already owned by another execution context. The result describes an ownership conflict rather than a missing object. It is primarily relevant to older synchronization APIs and compatibility code where an exclusive semaphore behaves similarly to a mutex: only one owner may hold it at a time.

Common causes

How to investigate

  1. Identify the current owner and the call stack on which ownership was obtained
  2. Measure how long ownership has been held and whether progress is still being made
  3. Inspect every return, exception, and cancellation path between acquisition and release
  4. Build a wait-for graph when two or more locks are involved

Developer guidance

Use scoped ownership so release occurs automatically. Keep the protected region small, document lock ordering, and never call unknown callbacks while retaining exclusive ownership.

Administrator and support guidance

Collect a process dump or synchronization trace before terminating the application. The owner stack is usually more valuable than the final failing acquisition.

How this code differs from related results

Unlike ERROR_SEM_OWNER_DIED, this code does not say the owner terminated. It says ownership still exists and prevents the requested exclusive acquisition.

Evidence worth collecting

For ERROR_EXCL_SEM_ALREADY_OWNED, begin the trace at the operation where code attempted a non-waiting acquisition while another thread still owned the semaphore. For ERROR_EXCL_SEM_ALREADY_OWNED, preserve the exact API boundary, numeric result, process and thread identifiers, relevant object state, and the component version. The first verification point should be to identify the current owner and the call stack on which ownership was obtained. This evidence distinguishes the specific ERROR_EXCL_SEM_ALREADY_OWNED contract from a later secondary failure.

Recovery and verification

Recovery for ERROR_EXCL_SEM_ALREADY_OWNED should address the observed condition rather than merely retrying the same call. After the change, reproduce the scenario in which code attempted a non-waiting acquisition while another thread still owned the semaphore, then confirm that the intended operation completes and that cleanup returns all associated resources. For ERROR_EXCL_SEM_ALREADY_OWNED, also verify that the next repeated operation follows the same successful path without increasing the resource class implicated by this result.

When to escalate

Escalate ERROR_EXCL_SEM_ALREADY_OWNED with a minimal reproduction focused on the failing synchronization boundary. Include the operating-system build, binary architecture, runtime or compatibility-layer version, the exact input values, and a timestamped trace showing code attempted a non-waiting acquisition while another thread still owned the semaphore. For the ERROR_EXCL_SEM_ALREADY_OWNED escalation record, note whether changing concurrency, object lifetime, target process, module set, or endpoint location alters the result.

References


Looking for a different code? Search another status or error code.

Exit mobile version