새로 발견된 dead lock

새로운 dead lock이 발견되서 그제 고쳤다.

혹 아시는 분들도 있겠지만, VS는 총 약 800개의 component 들로 이루어져 있다. 내가 속해 있는 language service 팀만 해도 VS 프로젝트 팀 VS 코어 C# 컴파일러 소스 콘트롤, 클라스 다이아 그램, 유닛 테스트 등등 아 곧 발표돌 team 서버도 잊으면 안되겠다 하여간 여러 많은 다른 콤퍼넌트들과 상호 작용을 한다.

뭐. 버그 나름이겠지만, 우리 팀 콤퍼넌트 자체의 버그는 그래도 고치기 쉽다. 그런데 이게 다른 팀과의 상호 작용 때문일 경우 이팀과 저팀의 소스를 넘나 들며 원인 파악 하는게 ..... 뭐 재미있다고 해놓자.

하여간, 이번 dead lock 역시 컴파일러 팀과 우리팀 그리고 프로젝트 팀 3개의 컴퍼넌트가 상호 작용 할때 서로 다른 assumption을 하기 때문에 발생하는 버그 였다.

간단하게 버그를 설명하면, 엄청 느린 컴퓨터나 아니면 엄청 큰 프로젝트를 VS에서 바로 오픈하고 백그라운드에서 VS가 소스들을 parse 하고 있는 동안 새 C# 파일을 열고 #pragma를 이용해서 project의 configuration을 바꾸면, 어쩌다 dead lock이 걸릴수도 있다.

픽스는 뭐 간단하게 컴파일러 팀과 프로젝트 팀간의 콜을 인터셉트해서 dead lock이 안걸리도록 coordinate 하는 건데...

하여간, 역시 프로그램이 점점 더 방대해 지면서 간 컴퍼넌트간의 interaction과 integration이 얼마나 힘든건지 또 한번 느끼게 해주는 버그였다

흠냐 수고!!