URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10083
[ Назад ]

Исходное сообщение
"FreeBSD 10, pthread и прочее"

Отправлено fail , 11-Мрт-16 14:30 

вожусь с одним стендовым проектом,
- по ряду причин пришлось добавить класс Мютекс ( и прочего многопоточного);
- возможно в будущем на полную замену в проекте стандартного QMutex,etc из Qt

касаемо UNIX-like - все работает нармально(со всеми штатными ср-вами) на платформах: Debian 5,6,7; Ubuntu 10, 14 (all LTS); CentOS 6.x и др.

на десятой фряхе траблы(см. дальше), кто подскажет в чем может быть проблема и направление копания ???

инфа по фряхе, все штатно через pkg и без возни с портами:
- FreeBSD 10.0-RELEASE r260789 Fri Jan 17 01:46:25 UTC 2014 ... i386
- libpthread-stubs-0.3_6
- cmake-3.4.2
- clang-3.3 (tag/RELEASE/final 183502) 20130610
- qt5-{*}-5.5.1
- gdb-6.1.1

>>>>

main() проекта, больше никаких глобальных переменных не объявлено:
$cat fake-project.cpp
...
/* */

  //FMemDebugger memDebugger;

/* */

int main(
int argc,
char *argv[])
{

  int ret = 0;

  FMemDebugger memDebugger;
...

};

>>>>

Выжимка из объявления класса FMemDebugger
$ cat fake-mem-debugger.h
...
class FMemDebugger
{

...
  private:

    //QMutex mutex;
    FMutex mutex;

};

>>>>

Интерфeйсная часть класса FMutex:
$ cat fake-mutex.cpp
...
FMutex::FMutex(
bool recursive)
{

  NEW_OP(df, FMutexPrivate(recursive));

};

FMutex::~FMutex()
{

  DELETE_OP(df);

};
...

>>>>

Функционал класса FMutex:
$ cat fake-mutex-unix.cpp
...
FMutexPrivate::FMutexPrivate(
bool recursive)
:
modeRecursive(recursive)
{

  wakeup = false;

  count = 0;
  owner = 0;

  report_error(pthread_mutex_init(&handle, NULL), "FMutex", "mutex init");
#if !defined(Q_OS_ANDROID)
  report_error(pthread_cond_init(&cond, NULL), "FMutex", "cv init");
#else
  priv_initialize_pthread_cond(&cond, "FMutex");
#endif

};

FMutexPrivate::~FMutexPrivate()
{

  report_error(pthread_cond_destroy(&cond), "FMutex", "cv destroy");
  report_error(pthread_mutex_destroy(&handle), "FMutex", "mutex destroy");

};
...


>>>>

Segmentation fault, выхлоп gdb, memDebugger до main():
...
#0  0x2946519e in pthread_mutex_unlock () from /lib/libthr.so.3
[New Thread 2c003080 (LWP 100388/test-imm-0.1.1)]
(gdb) bt
#0  0x2946519e in pthread_mutex_unlock () from /lib/libthr.so.3
#1  0x294685b0 in _pthread_cond_wait () from /lib/libthr.so.3
#2  0x294689dd in pthread_cond_wait () from /lib/libthr.so.3
#3  0x281d4d1a in FMutexPrivate::wait ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0

>>

#4  0x281d4b82 in FMutexPrivate::lock ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0

здесь в лог падает "FMutex::lock: failure: Invalid argument"
$ cat fake-mutex-priv.cpp
...
void FMutexPrivate::lock()
{
...
    int code = pthread_mutex_lock(&handle);
    if (code != 0) {

      LOG_WRN(QString(I18N_NOOP("FMutex::lock: failure: ")) + strerror(code));
      bool isLocked = wait();
...
};
...
>>

#5  0x281d41d9 in FMutex::lock ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#6  0x2818bcb9 in FmemDebugger::Remove ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#7  0x2822706a in exp_mem_holder_remove ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#8  0x2818acd6 in exp_rmv_new ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#9  0x281d4141 in FMutex::~FMutex ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#10 0x2818b2e1 in FmemDebugger::~FmemDebugger ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#11 0x2957bca9 in __cxa_finalize () from /lib/libc.so.7
#12 0x280fc525 in __do_global_dtors_aux ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#13 0x2825d528 in _fini () from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#14 0x2bafb5c0 in ?? ()
#15 0x280612b0 in ?? () from /libexec/ld-elf.so.1
#16 0xbfbfd9d8 in ?? ()
#17 0x2804f1d1 in dlclose () from /libexec/ld-elf.so.1
#18 0x2804e4bb in r_debug_state () from /libexec/ld-elf.so.1
#19 0x2957bca9 in __cxa_finalize () from /lib/libc.so.7
#20 0x2952182a in exit () from /lib/libc.so.7
#21 0x08049522 in _start1 ()
...


>>>>

Segmentation fault, выхлоп gdb, memDebugger в main():
...
#0  0x2946519e in pthread_mutex_unlock () from /lib/libthr.so.3
[New Thread 2c003080 (LWP 100388/test-imm-0.1.1)]
(gdb) bt
#0  0x2946519e in pthread_mutex_unlock () from /lib/libthr.so.3
#1  0x294685b0 in _pthread_cond_wait () from /lib/libthr.so.3
#2  0x294689dd in pthread_cond_wait () from /lib/libthr.so.3
#3  0x281d4d1a in FMutexPrivate::wait ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0

>>

#4  0x281d4b82 in FMutexPrivate::lock ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0

Таже хрень - в лог падает "FMutex::lock: failure: Invalid argument"
$ cat fake-mutex-priv.cpp
...
void FMutexPrivate::lock()
{
...
    int code = pthread_mutex_lock(&handle);
    if (code != 0) {

      LOG_WRN(QString(I18N_NOOP("FMutex::lock: failure: ")) + strerror(code));
      bool isLocked = wait();
...
};
...
>>

#5  0x281d41d9 in FMutex::lock ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#6  0x2818bcb9 in FmemDebugger::Remove ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#7  0x2822706a in exp_mem_holder_remove ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#8  0x2818acd6 in exp_rmv_new ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#9  0x281d4141 in FMutex::~FMutex ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#10 0x2818b2e1 in FmemDebugger::~FmemDebugger ()
   from /usr/home/user/git/dev/net/qth/src/.build/srcs/libtest-fakelib.so.0
#11 0x080498bf in main ()
...


Содержание

Сообщения в этом обсуждении
"FreeBSD 10, pthread и прочее"
Отправлено fail , 12-Мрт-16 14:03 
> ...

все, вопрос закрыт



"FreeBSD 10, pthread и прочее"
Отправлено _Mister , 28-Май-16 08:19 
У меня в Qt столько же. Выдаёт все подряд пока все правильно не напишншь.