26 Aug
2014
Posted in: 코드
By    6 Comments

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


RPC를 APC로 구현하면 망하는 이유
by 신영진(YoungJin Shin), codewiz at gmail.com, @codemaru, http://www.jiniya.net

어제 새 기능 버그를 잡고 있었는데 생각보다 일이 커졌다. 결국 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

믿을거라곤 이벤트와 뮤텍스, 그리고 파일맵 밖엔 없는듯… 아님 파이프가 나을래나?
뭔가 일이 쉽게 풀린다 했지… ㅠㅜ
오늘은 장사 접고 낼 해야겠다…


  • 트랙백 주소: http://www.jiniya.net/wp/archives/14201/trackback

관련 글

  • Lyn

    메일슬롯 어떠세요 ㅋㅋㅋ

  • YoungJin Shin

    메일슬롯에도 아픈 추억이 ㅋㅋ~
    윈도2k에선 클라이언트가 여러개 동시에 CreateFile을 못하더라고…
    그것도 죄다 이벤트와 파일맵으로 바꿨던 추억이 ㅎㅎ

    그나저나 접때 VS2013,2012 CRT XP SP3이상만 지원한다는 건 어디 코멘트가 나와 있는거야? 잘 안보여서…

  • Reinhard Vz

    소켓추천!

  • YoungJin Shin

    남자라면 소켓인가요? ㅋ

  • Lyn

    아… 그거요?

    http://msdn.microsoft.com/en-us/library/jj851139.aspx
    여기요.

    the supported versions are Windows XP Service Pack 3 (SP3) for x86, Windows XP Service Pack 2 (SP2) for x64, and Windows Server 2003 Service Pack 2 (SP2) for both x86 and x64.

    라고 써있어요.

    http://www.microsoft.com/ko-kr/download/details.aspx?id=5555
    재배포 패키지 보셔도 2010 부터는 sp3 이라고 명시되 있구요.

    static link 해보니 일단 실행 자체는 되는데 동작이 좀 요상하더군요. 엉뚱한데서 에러난다거나

  • YoungJin Shin

    땡큐 ㅋ~
    쫌 더 기둘려야겠넹.