Pages

Sunday 5 August 2012

How to get rid from "ContextSwitchDeadlock was detected" exception.

ContextSwitchDeadlock was detected
Message: The CLR has been unable to transition from COM context 0x118b008 to COM context 0x118b178 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.

The contextSwitchDeadlock managed debugging assistant (MDA) is activated when a deadlock is detected during an attempted COM context transition.

Symptoms

  • The most common symptom is that a call on an unmanaged COM component from managed code does not return. 
  • Another symptom is memory usage increasing over time.
Resolution
To avoid these error please follow below steps and steps may vary slightly version to version. Following steps are taken from VS2010:

  1. Click on "Debug" menu from visual studio toolbar.
  2. Go to "Exception.." or just press shortcut key (CTRL+ALT+E).
  3. Select "Managed Debugging Assistants" Node.
  4. Uncheck "ContextSwitchDeadlock" from Thrown column.
  5. Click "OK" and enjoy.

1 comment: