MySQL: Error in my_thread_global_end()

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

MySQL: Error in my_thread_global_end()

Сообщение EmeraldMan » 22.04.2013 17:56:57

Debian 64;
Lazarus 1.0.8, FPC 2.6.2;
MySQL 5.5.30;

Есть многопоточная консольная программа, каждый поток держит свое соединение с БД. Перед завершеним программы все Thread'ы закрывают соединения с базой, потоки уничтожаются, прога закрывается. И вот уже после закрытии программы через секунды 2-3 консоль выводит сообщение Error in my_thread_global_end(): 5 threads didn't exit (сколько потоков коннектилось к базе такая цифра и выводится). Причем если коннект происходил только от главного потока, то никакой ошибки не выводится.
До этого стоял Lazarus 1.0 (FPC 2.6.0), там использовал компоненты TMySQL51Connection (версия базы была MySQL та же 5.5, все корректно работало), после перехода на новую версию Lazarus поменял компоненты на TMySQL55Connection. До перехода данной проблемы не наблюдалось.

По ходу программы, потоки могут закрывать соединение, вновь открывать - все корректно происходит. Т.е. данная ошибка не критичная, никаких побочных эффектов от неё не замечал, но все же не приятно, что она выскакивает.

Подскажите, пожалуйста, решение данной проблемы.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: MySQL: Error in my_thread_global_end()

Сообщение hinst » 21.11.2013 16:51:38

что за гавно. Почему я должен всё время трахаться с багами которые посадил не я; я застрелюсь скоро наверное
У меня такая же шляпа "threads didn't exit". И тоже с MySQL 55
Похоже что это MySQL-щики кривожопые баг посадили
Причём, у меня это происходит не только при выходе из программы, а вообще при нагрузке на чтение на БД
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: MySQL: Error in my_thread_global_end()

Сообщение GAMER » 27.11.2013 22:13:12

MariaDB так же себя ведет?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: MySQL: Error in my_thread_global_end()

Сообщение hinst » 27.11.2013 23:00:59

Если кому интересно, проблемы с MySQL я "разобрал".
Во-первых, FPC по умолчанию использует потоко-небезопасную версию MySQL-клиента. Я попытался было создать баг: http://bugs.freepascal.org/view.php?id=25358 мне сказали, что ты можешь типа сам загрузить другую, потокобезопасную дин.библиотеку (в общем, по ссылке всё ясно объяснено).
Во-вторых, касательно конкретно Error in my_thread_global_end(): 5 threads didn't exit: нужно уничтожать подключение в том же потоке, в котором оно было создано и открыто. (насчёт открытия не уверен). Тогда ошибки не будет. При этом использовать его можно из любых потоков (у меня прокатило), если только они не будут использовать его параллельно (пока один использует, другие должны ждать)

Добавлено спустя 24 секунды:
Если есть вопросы конкретно по этому делу, пишите в эту тему или в личку
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: MySQL: Error in my_thread_global_end()

Сообщение Art!P » 28.11.2013 17:48:44

У меня прога в потоках с MySQL работает, поток сам обрабатывает сигнал закрытия terminate, процесс ждет завершение операции, т.е. потоки завершаются как только становится возможным: закрываются соединения, синхронизируются данные с основным циклом программы.
Правда потоки у меня не динамические, их немного. Для каждого потока свой отдельный клиент подключения к БД, общих клиентов нет, в целом программа работает с 4-мя потоками, за месяц работы глюков не было (ОС линукс дебиан)
Аватара пользователя
Art!P
новенький
 
Сообщения: 27
Зарегистрирован: 28.07.2012 14:37:53

Re: MySQL: Error in my_thread_global_end()

Сообщение EmeraldMan » 08.01.2014 22:18:56

В uses модуля, где описаны потоки, прописал mysql55.
После соединения потока с базой добавил вызов процедуры my_thread_init, перед закрытием соединения вызов my_thread_end.
В принципе, работает и только с одной my_thread_end.

Ошибку выдавать перестал. Другие способы не помогали.
Повторюсь - ошибка была не критичная, все работало корректно, напрягал только сам факт её отображения в консоле после закрытия программы.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 237

Рейтинг@Mail.ru
cron