기본 콘텐츠로 건너뛰기

[Visual Studio] ContextSwitchDeadlock 오류에 대한 처리...

이번 프로젝트에서 BackOffice를 사용하는 사용자 간에 메시지 공유와 서버와 클라이언트 간의 Real Message 수신, FTP File Upload 등의 통신 기능을 적용해야 한다.
그리고 메시지 수신에 따라서 사용자의 어플리케이션에 NotifyIcon 처리를 해 주어야 한다.

이런 저런 처리들을 가능하면 최대한 공통화를 하다 보니 Thread 가 난무한다. -_-+

그렇게 많은 상황들을 정리하면서 테스트를 하던 중에 갑자기 나타난 오류 메시지....

CLR에서 60초 동안 COM 컨텍스트 xxxxx 에서 COM 컨텍스트 xxxxx 로 전환하지 못했습니다. 대상 컨텍스트/아파트를 소유하는 스레드가 펌프 대기를 수행하지 않거나, Windows에서 메시지를 펌프하지 않고 매우 긴 실행작업을 처리하고 있는 것 같습니다. 이러한 상황은...

위의 오류의 내용을 유추하면 Thread 간에 전환이 제대로 처리되지 못하고 마치 무한루프와 같은 상태에 빠진 것으로 보인다.

잘 처리되던 것이 몇 가지를 추가한 후에 저런 오류를 뿜어내는 것으로 보아서 추가한 부분이 또 다른 Thread에서 연결되면서 발생하는 것이 아닌지 의심이 된다.

일단 구글의 검색에 따르면 디버그 모드에서만 발생한다고 정리해 논 글들이 많다. 하지만 얼마 전까지만 해도 되던 상태였으니 딱히 긍정이 되지는 않지만, 일단 처리 방식을 정리해 놓도록 한다.

Visual Studio > 디버그 > 예외 를 선택해서 예외 설정 창을 열고 Managed Debugging Assistants 목록을 클릭한 후에 "ContextSwitchDeadlock" 항목을 선택 해제하면 된다.



음~

일단 저렇게 처리해도 지금의 상황에서는 동일하게 문제가 발생한다. Debug 빌드가 문제일지 아니면 Thread 처리가 복잡하게 얽혀서 생기는 문제인지 좀 애매하다. ㅠㅠ


댓글