futex机制返回了一个意外的错误代码?

10

在同一进程中使用存储在共享内存中的rwlock对象的两个线程在pthread压力测试期间遇到崩溃。我花了一段时间尝试查找内存损坏或死锁,但目前还没有发现。这只是通知我已经创建了死锁的不太理想的方式吗?有关调试此问题的工具/方法的任何指针?

线程5“tms_test”收到信号SIGABRT,中止。 [切换到线程0x7ffff28a7700(LWP 3777)] 0x00007ffff761e428在../sysdeps/unix/sysv/linux/raise.c文件的__GI_raise函数中(sig=sig@entry=6)。 54 ../sysdeps/unix/sysv/linux/raise.c:没有此类文件或目录。 (gdb) bt #0 0x00007ffff761e428在../sysdeps/unix/sysv/linux/raise.c文件的__GI_raise函数中(sig=sig@entry=6)。 #1 0x00007ffff762002a在abort.c文件的__GI_abort函数中。 #2 0x00007ffff76607ea在../sysdeps/posix/libc_fatal.c文件的__libc_message函数中(do_abort=do_abort@entry=1,fmt=fmt@entry=0x7ffff77776cc“%s”)。 #3 0x00007ffff766080e在../sysdeps/posix/libc_fatal.c文件的__GI___libc_fatal函数中(message=message@entry=0x7ffff79c4ae0“The futex facility returned an unexpected error code.”)。 #4 0x00007ffff79be7e5在../sysdeps/nptl/futex-internal.h文件的futex_fatal_error函数中。 #5 在../sysdeps/unix/sysv/linux/futex-internal.h文件中的futex_wait函数(private=,expected=,futex_word=0x7ffff7f670d9)。 #6 在../sysdeps/nptl/futex-internal.h文件中的futex_wait_simple函数(private=,expected=,futex_word=0x7ffff7f670d9)。 #7 在pthread_rwlock_wrlock.c文件中的__pthread_rwlock_wrlock_slow函数中(rwlock=0x7ffff7f670cd)。 #8 0x00000000004046e3在tms_mem.c文件的_memstat函数中(offset=0x7fffdc0b11a5,func=0x0,lineno=0,size=134,flag=1 '\001')。 #9 0x000000000040703b在tms_mem.c文件的TmsMemReallocExec函数中(in=0x7fffdc0abb81,size=211,func=0x43f858“_malloc_thread”,lineno=478)。 #10 0x000000000042a008在tms_test.c文件的_malloc_thread函数中(arg=0x644c11)。 #11 0x000000000041a1d6在tms_mem.c文件的_threadStarter函数中(arg=0x644c51)。 #12 0x00007ffff79b96ba在pthread_create.c文件的start_thread函数中(arg=0x7ffff28a7700)。 #13 0x00007ffff76ef82d在../sysdeps/unix/sysv/linux/x86_64/clone.S文件中的clone函数中。
2个回答

10
很难调试没有详细文档的东西。我试图找到有关“futex facility returned an unexpected error code”的任何有用信息,但似乎在futex文档中没有详细说明。 在我的情况下,此消息由sem_wait(sem)生成,其中sem不是有效的sem_t指针。我意外地将其(由sem指向的内存)与一些随机整数一起覆盖,在使用sem_init(sem,1,1)初始化sem后发生了这种情况。 尝试检查您是否正在将有效指针传递给锁定函数。

这对我来说也是一种情况。我有一个集中式的数据结构,通过共享内存进行数据交换的接口。最近我改变了数据结构的大小,但是有一个程序忘记重新编译它。这导致程序“突然”崩溃,让我感到非常恐慌。但是在使用更新后的结构重新编译后,一切又恢复正常了。 - Janne Paalijarvi

1
当我将sem_t mutex声明为本地变量时,出现了这个错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接