2017-03-27 6 views
0

공유 메모리에 저장된 rwlock 객체를 사용하는 동일한 프로세스의 두 스레드가 pthreads 스트레스 테스트 중에 충돌합니다. 나는 메모리 손상이나 교착 상태를 찾으려고 잠시 보냈지 만 지금까지는 아무것도하지 않았다. 교착 상태가 발생했다는 것을 알려주는 최적의 방법이 아닌가? 이 디버깅 도구/방법에 대한 모든 포인터가?futex 시설에서 예기치 않은 오류 코드가 반환 되었습니까?

 
Thread 5 "tms_test" received signal SIGABRT, Aborted. 
[Switching to Thread 0x7ffff28a7700 (LWP 3777)] 
0x00007ffff761e428 in __GI_raise ([email protected]=6) at ../sysdeps/unix/sysv/linux/raise.c:54 
54 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. 
(gdb) bt 
#0 0x00007ffff761e428 in __GI_raise ([email protected]=6) at ../sysdeps/unix/sysv/linux/raise.c:54 
#1 0x00007ffff762002a in __GI_abort() at abort.c:89 
#2 0x00007ffff76607ea in __libc_message ([email protected]=1, [email protected]=0x7ffff77776cc "%s") at ../sysdeps/posix/libc_fatal.c:175 
#3 0x00007ffff766080e in __GI___libc_fatal ([email protected]=0x7ffff79c4ae0 "The futex facility returned an unexpected error code.") at ../sysdeps/posix/libc_fatal.c:185 
#4 0x00007ffff79be7e5 in futex_fatal_error() at ../sysdeps/nptl/futex-internal.h:200 
#5 futex_wait (private=, expected=, futex_word=0x7ffff7f670d9) at ../sysdeps/unix/sysv/linux/futex-internal.h:77 
#6 futex_wait_simple (private=, expected=, futex_word=0x7ffff7f670d9) at ../sysdeps/nptl/futex-internal.h:135 
#7 __pthread_rwlock_wrlock_slow (rwlock=0x7ffff7f670cd) at pthread_rwlock_wrlock.c:67 
#8 0x00000000004046e3 in _memstat (offset=0x7fffdc0b11a5, func=0x0, lineno=0, size=134, flag=1 '\001') at tms_mem.c:107 
#9 0x000000000040703b in TmsMemReallocExec (in=0x7fffdc0abb81, size=211, func=0x43f858 "_malloc_thread", lineno=478) at tms_mem.c:390 
#10 0x000000000042a008 in _malloc_thread (arg=0x644c11) at tms_test.c:478 
#11 0x000000000041a1d6 in _threadStarter (arg=0x644c51) at tms_mem.c:2384 
#12 0x00007ffff79b96ba in start_thread (arg=0x7ffff28a7700) at pthread_create.c:333 
#13 0x00007ffff76ef82d in clone() at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 
(gdb) 

답변

0

잘 문서화되지 않은 것을 디버깅하는 것은 꽤 어렵습니다. "futex 시설에서 예기치 않은 오류 코드를 반환했습니다"라는 유용한 정보를 찾으려고했지만 futex 설명서에 지정되지 않은 것으로 보입니다. 필자의 경우이 메시지는 sem_wait(sem)에 의해 생성되었으며, sem은 유효하지 않습니다. sem_t 포인터. 내가 실수로 sem을 sem_init(sem,1,1)으로 초기화 한 후 실수로 일부 메모리를 덮어 썼다. 잠금 기능에 유효한 포인터를 전달하는지 확인하십시오.