RPC를 APC로 구현하면 망하는 이유

@codemaru · August 26, 2014 · 2 min read

어제 새 기능 버그를 잡고 있었는데 생각보다 일이 커졌다. 결국 RPC가 필요하다는 결론에 도달했다. RPC를 뭐로 만들지 고민을 한참했다. 어떤게 제일 손 안데고 코풀 수 있는 방법일까(?!) 고민한 끝에 APC를 사용한 꼼수로 구현하기로 했다. 메커니즘은 완벽했다. 마치 APC는 나에게 RPC 구현을 위해서 만들어 둔 통로처럼 느껴졌다. 둘다 procedure call이니 뭐 도찐개찐이기도 하고. 여튼 그렇게 지루한 코드를 제법 쓰고는 얼추 만들어서 테스트를 하는데 이건 뭐지?! 주구장창 크래시!!! 그러다 찾아본 QueueUserAPC 도움말. 설명을 해놔도 안 읽은 내 잘못이 컸다 ㅠㅜ~

Note Queuing APCs to threads outside the caller’s process is not recommended for a number of reasons. DLL rebasing can cause the addresses of functions used by the APC to be incorrect when the functions are executed outside the caller’s process. Similarly, if a 64-bit process queues an APC to a 32-bit process or vice versa, addresses will be incorrect and the application will crash. Other factors can prevent successful function execution, even if the address is known.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684954(v=vs.85).aspx

믿을거라곤 이벤트와 뮤텍스, 그리고 파일맵 밖엔 없는듯… 아님 파이프가 나을래나?

뭔가 일이 쉽게 풀린다 했지… ㅠㅜ

오늘은 장사 접고 낼 해야겠다…

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중