Atomic<uint32> _lockFlag의 load 함수 호출 시 읽기 액세스 위반
538
작성한 질문수 2
강사님 안녕하세요. 정말 좋은 강의 잘 듣고 있습니다 ㅎㅎ 감사합니다.
다름이 아니라 지금까지 저 스스로 코드를 써나가며 강의를 복기하고 있는데, 이번 시간 진도 이후로 갑자기 문제가 없었던 LockBased Memory Allocator 부분에 문제가 생겼습니다.
디버깅으로 함수 콜 스택을 추적해보니, Lock::WriteLock 함수에 쓰레드 자기 자신이 WRITE_LOCK을 가지고 있는지 확인하는
const uint32 lockThreadId = (_lockFlag.load() & WRITE_THREAD_MASK) >> 16;
에서 예외(읽기 액세스 위반)이 발생했고, 더 적은 쓰레드 환경(주 쓰레드 + 함수 실행 쓰레드 1개)에서도 예외가 발생했습니다.
atomic header에서
_NODISCARD _TVal load() const noexcept { // load with sequential consistency
const auto _Mem = _Atomic_address_as<int>(_Storage);
auto _As_bytes = __iso_volatile_load32(_Mem);
_Compiler_or_memory_barrier();
return reinterpret_cast<_TVal&>(_As_bytes);
}
_Mem이 0x18였다는 이유로 예외가 throw되었습니다.
Atomic 타입의 멤버 변수로부터 오류가 생긴다는 거 부터가 당황스럽고, 구글링해도 결과가 안나오고,
Stompallocator로도 추적이 안되어서, 디버깅 할 방법을 도저히 모르겠습니다. 이렇게 빌드도 잘되고 런타임에서 오류가 발생할 때, 강사님만의 노하우가 있으신가요? 더불어서 혹시 접해보신 오류라면 조금 도와주신다면 감사하겠습니다 ㅠㅠ
혹시 몰라서 함수 콜스택도 첨부합니다.
답변 2
1
보다 보니 단순한 NULL 크래시였습니다.
요런 버그는 크래시 난 지점에 수상한 코드가 없다면,
콜스택을 타고 가면서 NULL이 아닌지 확인이 필요합니다.
0
서비스가 참조되지 않았는데 서비스 속 session에 접근하려 해서 그랬던 거군요... 좋은 디버깅 팁 감사합니다.
덕분에 5시간의 대장정을 마칩니다. 감사합니다!
0
C++이 무서운게 크래시가 락에서 났다 그래서 락 코드가 문제라는 보장이 없습니다.
메모리 오염으로 인해 죄없는 피해자가 나타난 것일 수도 있고,
이러면 정말 찾기가 어렵고 경우에 따라 몇주씩 걸리거나
영영 못찾아서 프로젝트가 망하는 경우도 생깁니다. (흔하진 않지만 ^^;)
위 내용만으로는 저도 알 수 없고,
크래시난 위치로 보면 저 녀석이 범인일 것 같진 않고 메모리가 이미 꺠진 상황으로 보입니다.
일단 다른 환경에서도 똑같이 재현되는지 확인해보는 것이 필요할 것 같네요.
rookiss@naver.com 로 전체 프로젝트 압축해서 보내주시면,
제 컴퓨터에서도 동일한 문제가 재현되는지 확인해보겠습니다.
writeLock을 잡을때 꼭 empty 상태여야하는 이유?
0
63
2
Memory Pool에서 오버플로우 질문입니다.
0
94
2
포토폴리오 및 진로 관련하여 고민입니다.
0
167
1
포토폴리오 관련 고민입니다.
0
90
1
실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.
0
107
2
성능 테스트 결과
0
117
2
게임 서버 Stateful, Stateless 진로 고민
0
143
1
WaitOnAddress와 Sleep의 차이 질문
0
97
1
궁금한거 있습니다.
0
92
2
JobTimer 구동 스레드
0
116
2
TryPop() 동작 관련 질문
0
86
1
로드맵 C#서버 C++서버 방향성 질문
0
162
2
스레드 id를 출력할떄 메인스레드 id도 출력되나요?
0
80
1
생명주기를 위한 의도적 복사
0
94
2
락프리의 실무에서 사용 질문
0
154
2
32bit threadID와 16비트 상위 WriteFlag에 대해
0
109
2
mutex와 sleep 차이점
0
133
1
실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다
0
167
2
Stomp Allocator의 Release함수에 대한 질문입니다.
0
101
1
공부법 관련해서
0
189
2
MakeShared 함수 관련
0
118
1
지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.
0
152
2
운영체제관련 질문입니다
0
143
1
send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.
0
125
2





