The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"FreeBSD 10, pthread и прочее"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"FreeBSD 10, pthread и прочее"  +/
Сообщение от fail on 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 ()
...

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "FreeBSD 10, pthread и прочее"  +/
Сообщение от fail on 12-Мрт-16, 14:03 
> ...

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


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "FreeBSD 10, pthread и прочее"  +/
Сообщение от _Mister (ok) on 28-Май-16, 08:19 
У меня в Qt столько же. Выдаёт все подряд пока все правильно не напишншь.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру