Потоки создаются при помощи BeginThread, в uses основного dpr модуля объявлены {$IFDEF DARWIN}cthreads, cmem, heaptrc,{/$ENDIF}
Проблема в том, что созданный поток использует и высвобождает память выделенную в основном потоке. В Windows всё работает как часы, в MacOS падает. Какие тонкости менеджера памяти под unix системы я не учёл?
Под MacOS ошибка иногда сопровождается сообщением
"malloc *** error for object 0xffffffff: Non-aligned pointer being freed"
P.S. Также не работает -dDEBUG под макосью
FPC многопоточность и память
Модератор: Модераторы
Модуль heaptrc с менеджером памяти из cmem не работает!
- XProger
- новенький
- Сообщения: 44
- Зарегистрирован: 13.08.2007 02:52:28
- Откуда: Москва
- Контактная информация:
Без cmem та же проблема, смотрел на флажок NeedLock менеджера памяти - выставлен в False. Флажок менял, менеджер памяти на свой с критическими секциями заменял, но всё бестолку рандомно проскакивает ошибка:
Опять же, в винде всё работает отлично, память из других потоков выделяется и высвобождается успешно.
malloc: *** error for object 0x1: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_bread to debug
<Error>: doClip: empty path
*** mmap(size=4261416960) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_bread to debug
<Error>: doClip: empty path
Runtime error 216 at и куча адресов
Опять же, в винде всё работает отлично, память из других потоков выделяется и высвобождается успешно.
