| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Программа падает при работе с pthreads & mysql |
| Автор: M4D 23.4.2006, 11:48 |
| Здравствуйте! Пишу программу, которая должна работать в многопоточном режиме, и каждый поток имеет собственное соединение с MySQL. Как было сказано в мане, в начале программы делаю my_init(); а в созданном потоке в начале mysql_thread_init(); и mysql_thread_end(); перед pthread_exit(); Но при вызове mysql_real_connect() прога падает - "Segmentation fault (core dumped)" Ось - FreeBSD 6, компилирую так: gcc serv.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lpthread -lmysqlclient_r -o serv Компилится нормально, без ошибок. Но прога падет при попытке коннекта с MySQL |
| Автор: kirjanov 23.4.2006, 20:57 |
| желательно привети исходный код.... |
| Автор: M4D 23.4.2006, 21:58 | ||
Приведу детали:
падает |
| Автор: bilbobagginz 24.4.2006, 01:13 |
| результат всех функций нужно тестировать на предмет ошибок. либо ты тестируешь результаты функций в коде, либо твоя программа вылетает и ты не знаешь почему. каждая из функций mysql могла упасть. и каждую ф-ю не типа void, нужно проверять на результат. если она возвращает плохой результат, стоит протестировать переменную errno, или какую внутреннюю свою. посмотри пример использования: http://docsrv.caldera.com:8457/cgi-bin/info2html?(mysql.info.gz)mysql_real_connect пока. |
| Автор: M4D 24.4.2006, 17:47 |
| Я бы протестировал на ошибки, да вот она падает видимо в недрах mysql_real_connect(), т.к. printf("2\n"); не вызывается. Про возвращаемые ошибки я конечно же знаю ;) меня интересовал вопрос - почему же она падает? |
| Автор: kirjanov 25.4.2006, 13:59 | ||
| M4D, так ты все же посмотри, что возвращает mysql_real_connect().... и тогда
|
| Автор: bilbobagginz 25.4.2006, 18:15 |
| используй strace. |
| Автор: M4D 25.4.2006, 22:35 |
| Вобщем проблема решилась! Очень, очень странно, но: была у меня в теле проги объявлена структура typedef struct { ... } my_struct; my_struct struc1; Так вот, когда она была, прога и падала) а когда я ее удалил, все стало нормально работать )) мистика какая-то... перенес все данные из структуры в виде глобальных переменных = все пашет спасибо всем, кто откликнулся! |
| Автор: bilbobagginz 27.4.2006, 12:35 |
| может быть проблема в том что если внутри блока потока ты объявляешь переменную, то она локальна для данного потока. и когда ты пытался обращаться из одного потока на адрес этой переменной другого, то получал совершенно правильный SEGFAULT. |