안녕하세요. 문의 있어서 남깁니다.
kakaoMap deinit 관련하여 질문인데요.
semaphore 에서 간헐적으로 크래시가 발생되고 있습니다.
저희쪽에서도 파이어베이스 크래시리틱스 에서만 확인하고 있어 정확한 원인 파악은 되지 않은 상태 인데요.
MetalRenderingManager SDK 내부 에서 semaphore를 사용하는것 같은데 아직 wait 상태에서 MetalRenderingManager 자체가 해제되는 경우가 있는것 같습니다. 관련하여 확인이 가능 할까요?? 파이어베이스 크래시 로그도 함께 첨부하여 올립니다.
현재 최신버전인 2.12.9 사용하고 있습니다.
직전 버전인 2.12.8 에서 관련내용 수정 있었다고 하는데 관계가 있을까요?
카카오공유_semaphore관련.txt (24.7 KB)
80% 이상이 BUG IN CLIENT OF LIBDISPATCH: Semaphore object deallocated while in use (current value < original value)
다음과 같은 키 값이 보여 집니다.
혹시 확인이 오래 걸릴까요?? 크래시가 늘어나고 있어서 빠른 조치가 필요한 상황 이여서요.
특정 플로우 에서만 발생되는것이 아닌 로그상으로는 map deinit 시,
map 단순 접근 시, 기존 route 삭제 후 다시 그려줄때 등 모든 상황에서 발생이 되고 있습니다.
@티머니모빌리티0529
콜스택을 확인해보면 KakaoMapsSDK 에서 의도한 객체 정리 과정이 아니라 관련된 객체가 RxSwift에 의해 일괄 삭제되고 있는 것으로 보입니다.
KakaoMapsSDK는 정해진 라이프사이클 관리 방식에 따라 동작하도록 되어 있으며, 더이상 사용하지 않아 삭제되는 경우에도 절차에 따라 순차적으로 정리되어야 합니다. 크래시가 발생하는 지점으로 미루어보아 삭제되기 전에 KMController.resetEngine이 호출되지 않은 것으로 보이며, 일반적으로 ARC에 의해 객체가 순차적으로 정리될 경우에 resetEngine이 불리지 않았으면 객체 삭제 과정에서 resetEngine이 호출되도록 되어 있으나 이러한 절차 없이 삭제된 것 같아 보입니다.
문제 해결을 위해서는 우선 삭제되기 전에 resetEngine을 호출하셔야 합니다.
또한, 로그상 발생한 크래시는 엔진이 살아 있는 동안에는 발생할 수 없는(삭제되지 않는) 부분인데 사용중 모든 상황에서 발생한다고 하신 것으로 보아 정상적인 객체 유지 및 사용이 되지 못한 부분이 있는 것으로 보입니다.
의견 주신 것처럼 deinit 시 resetEngine 명시적으로 호출하여 재배포 진행 하였는데요.
동일하게 발생되고 있습니다.
그리고 위에 답변처럼 KakaoMapSDK 쪽에서도 resetEngine 이 불리지 않았으면 객체 삭제 과정에서 resetEngine 이 호출되도록 되어 있다. 라고 해주셨는데 왜 발생이 되는 걸까요??
사용중 모든 상황에서 라고 말씀드린 부분은
사용자가 지도 init 후 10초 정도 유지(아무 동작하지않음) 후 바로 나간 걸로 확인 되는데 나가면서 바로 죽는 경우도 있어서 모든 상황에서 발생되는것 같다 라고 의견 드렸습니다.
가장 높은 빈도수에서는 사용자가 백그라운드에서 20분 이상 있다가 다시 들어올때 죽는거 같은데 백그라운드로 갈때도 pause 가 아닌 reset 을 해줘야 하나요??
그렇다면 backgorund 갔을때 reset을 해주고 다시 들어오면 기존 데이터들을 다시 불러와서 다시 그려줘야 하는게 맞을까요??
안녕하세요! 바쁘시겠지만 빠른 확인 요청 드립니다.
@티머니모빌리티0529
문제의 원인은 확실하지 않지만 보완코드를 추가하여 2.12.10 으로 배포하였습니다. 해당 버전으로 확인해 보시기 바랍니다.
백그라운드로 갔다 돌아오는 경우 pause/resume 까지만 호출해도 문제는 없습니다.
1개의 좋아요