Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужен pdb файл для ODBC-драйвера / 25 сообщений из 38, страница 1 из 2
24.02.2015, 16:37
    #38887467
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
При работе c embed-версией firefird-а через odbc (32 бита) на некоторых компах начало виснуть внутри SQLDriverConnectW. Хотел бы понять причину, но не хватает отладочной информации. Где её брать, не строя odbc-драйвер ручками?
...
Рейтинг: 0 / 0
24.02.2015, 16:50
    #38887486
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
ArtDen,

спросить непосредственно того, кто занимается драйвером.

Вот тут http://www.firebirdsql.org/en/mailing-lists/ ищи "Firebird ODBC Development", там есть список рассылки.

Или снять полный дамп памяти зависшего процесса и прицепить его к тикету в трекере.
...
Рейтинг: 0 / 0
24.02.2015, 17:09
    #38887521
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Пока не ясно, виснет он внутри odbc-драйвера или же проходит глубже и виснет уже внутри firefird, так что не буду торопиться с тикетом. Пока что хочется увидеть хотя бы в каком месте происходит зависание.
...
Рейтинг: 0 / 0
24.02.2015, 17:43
    #38887567
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
ArtDenПока что хочется увидеть хотя бы в каком месте происходит зависание.
То есть ты даже Process Explorer ещё не запускал и в кнопочку Call Stack не тыкал?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2015, 18:54
    #38887632
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Dimitry Sibiryakov , пока что я это видел краем глаза по дампу, который я попросил снять. Сразу посмотреть по дампу, имя модуля, в котором зависло я не догадался (увидел только что висит в SQLDriverConnectW). Сейчас у меня на руках того дампа даже нету. Пытаюсь воссоздать ситуацию.
...
Рейтинг: 0 / 0
24.02.2015, 19:55
    #38887667
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Повторилось. Зависает не в odbc-драйвере, а в самом firebird-е. Теперь встал вопрос, где взять файл с отладочной информацией для 32-битного firebird-а в embed-варианте?

ЗЫ: зависает хитро и только на определённых компах.

Вот так не зависает:

1. Создаём коннект с базе
2. Создаём коннект с базе
3. Создаём коннект с базе

Вот так зависает:
1. Создаём коннект с базе
2. Создаём коннект с базе
3. Запускаем процесс (который к базе не обращается)
4. Создаём коннект с базе <---- Вот тут зависает
...
Рейтинг: 0 / 0
24.02.2015, 20:17
    #38887679
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Отладочную инфу нашёл. Оказывается, перед носом лежала.
Виснет внутри функции ISC_mutex_fini. О чём это говорит? Что мне надо подкрутить у себя, чтобы перестало виснуть?
...
Рейтинг: 0 / 0
24.02.2015, 20:29
    #38887686
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
В общем, неправильно сказал. Виснет не в ISC_mutex_fini. Если периодически делать паузы, видно, что он попадает то в одни, то в другие функции
Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 	gds32.dll!ISC_get_host(char * string, unsigned short length) Line 278	C++
>	gds32.dll!make_object_name(char * buffer, unsigned int bufsize, const char * object_name, const char * object_type) Line 4322	C++
 	gds32.dll!ISC_mutex_init(mtx * mutex, const char * mutex_name) Line 3838	C++
 	gds32.dll!Jrd::LockManager::initialize(sh_mem * shmem_data, bool initializeMemory) Line 2402	C++
 	gds32.dll!Jrd::LockManager::initialize(void * arg, sh_mem * shmem, bool init) Line 476	C++
 	gds32.dll!ISC_map_file(int * status_vector, const char * filename, void (void *, sh_mem *, bool) * init_routine, void * init_arg, unsigned long length, sh_mem * shmem_data) Line 2827	C++
 	gds32.dll!Jrd::LockManager::attach_shared_file(int * status) Line 340	C++
 	gds32.dll!Jrd::LockManager::acquire_shmem(long owner_offset) Line 1155	C++
 	gds32.dll!Jrd::LockManager::create_owner(int * status_vector, unsigned __int64 owner_id, unsigned char owner_type, long * owner_handle) Line 1736	C++
 	gds32.dll!Jrd::LockManager::initializeOwner(Jrd::thread_db * tdbb, unsigned __int64 owner_id, unsigned char owner_type, long * owner_handle) Line 413	C++
 	gds32.dll!LCK_init(Jrd::thread_db * tdbb, Jrd::lck_owner_t owner_type) Line 590	C++
 	gds32.dll!jrd8_attach_database(int * user_status, const char * filename, Jrd::Attachment * * handle, short dpb_length, const unsigned char * dpb) Line 1101	C++
 	gds32.dll!isc_attach_database(int * user_status, short file_length, const char * file_name, void * * public_handle, short dpb_length, const char * dpb) Line 1494	C++

или же так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
>	gds32.dll!os_utils::createLockDirectory(const char * pathname) Line 181	C++
 	gds32.dll!gds__prefix_lock(char * string, const char * root) Line 1765	C++
 	gds32.dll!ISC_map_file(int * status_vector, const char * filename, void (void *, sh_mem *, bool) * init_routine, void * init_arg, unsigned long length, sh_mem * shmem_data) Line 2819	C++
 	gds32.dll!Jrd::LockManager::attach_shared_file(int * status) Line 340	C++
 	gds32.dll!Jrd::LockManager::acquire_shmem(long owner_offset) Line 1155	C++
 	gds32.dll!Jrd::LockManager::create_owner(int * status_vector, unsigned __int64 owner_id, unsigned char owner_type, long * owner_handle) Line 1736	C++
 	gds32.dll!Jrd::LockManager::initializeOwner(Jrd::thread_db * tdbb, unsigned __int64 owner_id, unsigned char owner_type, long * owner_handle) Line 413	C++
 	gds32.dll!LCK_init(Jrd::thread_db * tdbb, Jrd::lck_owner_t owner_type) Line 590	C++
 	gds32.dll!jrd8_attach_database(int * user_status, const char * filename, Jrd::Attachment * * handle, short dpb_length, const unsigned char * dpb) Line 1101	C++
 	gds32.dll!isc_attach_database(int * user_status, short file_length, const char * file_name, void * * public_handle, short dpb_length, const char * dpb) Line 1494	C++

вот ещё:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
>	gds32.dll!ISC_map_file(int * status_vector, const char * filename, void (void *, sh_mem *, bool) * init_routine, void * init_arg, unsigned long length, sh_mem * shmem_data) Line 2819	C++
 	gds32.dll!Jrd::LockManager::attach_shared_file(int * status) Line 340	C++
 	gds32.dll!Jrd::LockManager::acquire_shmem(long owner_offset) Line 1155	C++
 	gds32.dll!Jrd::LockManager::create_owner(int * status_vector, unsigned __int64 owner_id, unsigned char owner_type, long * owner_handle) Line 1736	C++
 	gds32.dll!Jrd::LockManager::initializeOwner(Jrd::thread_db * tdbb, unsigned __int64 owner_id, unsigned char owner_type, long * owner_handle) Line 413	C++
 	gds32.dll!LCK_init(Jrd::thread_db * tdbb, Jrd::lck_owner_t owner_type) Line 590	C++
 	gds32.dll!jrd8_attach_database(int * user_status, const char * filename, Jrd::Attachment * * handle, short dpb_length, const unsigned char * dpb) Line 1101	C++
 	gds32.dll!isc_attach_database(int * user_status, short file_length, const char * file_name, void * * public_handle, short dpb_length, const char * dpb) Line 1494	C++

Он где-то там крутиться, но из функции подключения к базе не выходит
...
Рейтинг: 0 / 0
24.02.2015, 20:45
    #38887694
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
К сожалению т.к. исходники, выложенные на сайте не сосуществуют бинарникам и pdb-файлам, тяжело отлаживаться. Но смог понять по крайней мере, что крутиться в бесконечном цикле вот здесь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
// src\lock\lock.cpp
	while (SRQ_EMPTY(m_header->lhb_processes))
	{
		if (!m_sharedFileCreated) // <---Вот отсюда!!!!!
		{
			ISC_STATUS_ARRAY local_status;

			// Someone is going to delete shared file? Reattach.
			if (ISC_mutex_unlock(MUTEX) != 0)
			{
				bug(NULL, "ISC_mutex_unlock failed (acquire_shmem)");
			}
			detach_shared_file(local_status);

			THD_yield();

			if (!attach_shared_file(local_status)) {
				bug(local_status, "ISC_map_file failed (reattach shared file)");
			}
			if (ISC_mutex_lock(MUTEX)) {
				bug(NULL, "ISC_mutex_lock failed (acquire_shmem)");
			}
		} // <--- И до сюда!!!!!
		else
		{
			// complete initialization
			m_sharedFileCreated = false;

			// no sense thinking about statistics now
			prior_active = 0;

			break;
		}
	}
...
Рейтинг: 0 / 0
24.02.2015, 20:45
    #38887695
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
"сосуществуют" -> "соответвуют" :)
...
Рейтинг: 0 / 0
24.02.2015, 21:14
    #38887710
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Минимальный воспроизводимый пример сделать можешь ?
...
Рейтинг: 0 / 0
25.02.2015, 10:00
    #38888023
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Попробую
...
Рейтинг: 0 / 0
25.02.2015, 12:20
    #38888254
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Вот минимальный пример, вешающий подключение (без odbc):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
#include <string>

#include "Poco/Process.h"
#include "Poco/Pipe.h"
#include "ibase.h"

#pragma comment(lib, "fbclient_ms.lib")

const std::string server_and_path = "test_db.fdb";
const unsigned StatusLen = 20;

Poco::Pipe in_pipe;
Poco::Pipe out_pipe;


void connect1()
{
	isc_db_handle db_handle = nullptr;
	ISC_STATUS status_vect[StatusLen] = {};
	char pdb[1] = { isc_dpb_version1 };

	// connect 
	isc_attach_database(
		status_vect,
		server_and_path.size(),
		server_and_path.c_str(),
		&db_handle,
		sizeof(pdb),
		pdb
	);

	// start process
	Poco::Process::launch("cmd.exe", {}, "", &in_pipe, &out_pipe, nullptr);

	// disconnect
	isc_detach_database(status_vect, &db_handle);
}


void connect2()
{
	isc_db_handle db_handle = nullptr;
	char pdb[1] = { isc_dpb_version1 };

	ISC_STATUS status_vect[StatusLen] = {};

	// connect
	isc_attach_database( // <- ВИСНЕТ ЗДЕСЬ!
		status_vect,
		server_and_path.size(),
		server_and_path.c_str(),
		&db_handle,
		sizeof(pdb),
		pdb
	);

	// сюда уже не доходит :-(
	isc_detach_database(status_vect, &db_handle);
}


int main(int argc, char* argv[])
{
	connect1();
	connect2();
	return 0;
}



Для запуска процесса используется либа Poco, т.к. лень было писать ручками CreateProcess. Пробовал boost::process - ситуация аналогичная.
Если закомментировать создание процесса, то не виснет
...
Рейтинг: 0 / 0
25.02.2015, 12:30
    #38888271
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Прикольно. Если вместо "cmd.exe" запускать стандартный виндовый калькулятор вот так:

Код: plaintext
1.
Poco::Process::launch("calc.exe", {}, "");



То процесс подключения "отвисает" сразу как только я закрываю окно калькулятора :-)

PS: да, забыл: воспроизводится на Win7 64x Home, Win 8.1 64x. Firebird embed - последний стабильный с сайта
...
Рейтинг: 0 / 0
25.02.2015, 12:56
    #38888314
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
ArtDen,

спасибо, чуть позже гляну что там.
...
Рейтинг: 0 / 0
28.02.2015, 11:26
    #38891271
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Есть какие-нибудь результаты?
...
Рейтинг: 0 / 0
02.03.2015, 00:49
    #38891966
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Проверить руки ещё не дошли, но идея есть:
попробуй, как workaround, при создании процесса указать не наследовать хендлы родителя.
Например, если речь о CreateProcess, то укажи bInheritHandles = FALSE.
...
Рейтинг: 0 / 0
27.03.2015, 11:47
    #38918763
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Я правильно понимаю, что оно тебе не надо ? :)
...
Рейтинг: 0 / 0
27.03.2015, 12:03
    #38918810
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Надо. Просто пока переключится на другие проекты. Этот остался в подвешенном состоянии и мало того: он ещё не оплачен т.к. работа не выполнена :-)
...
Рейтинг: 0 / 0
03.04.2015, 07:08
    #38925801
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
На всякий случай напоминаю )
...
Рейтинг: 0 / 0
05.04.2015, 21:54
    #38927561
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
ArtDenНа всякий случай напоминаю )Ну так и я напоминаю - 17329707 пробовал ?
...
Рейтинг: 0 / 0
06.04.2015, 06:49
    #38927664
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Если даже с bInheritHandles = FALSE заработает, то меня такой вариант не устроит, потому что придется городить свой велосипед для работы с консольными потоками. Но в любом случае, уговорил, сегодня попробую
...
Рейтинг: 0 / 0
06.04.2015, 11:18
    #38927801
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
Проверил. При bInheritHandles = FALSE не виснет, при bInheritHandles = TRUE виснет. Вот исходник с CreateProcess:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
#include <Windows.h>
#include <string>

#include "ibase.h"

#pragma comment(lib, "fbclient_ms.lib")

const std::string server_and_path = "d:\\DATABASE.FDB";
const std::string process = "C:\\Windows\\System32\\calc.exe";
const unsigned StatusLen = 20;

void connect1()
{
	isc_db_handle db_handle = nullptr;
	ISC_STATUS status_vect[StatusLen] = {};
	char pdb[1] = { isc_dpb_version1 };

	// connect 
	isc_attach_database(
		status_vect,
		server_and_path.size(),
		server_and_path.c_str(),
		&db_handle,
		sizeof(pdb),
		pdb
	);

	// start process

	STARTUPINFOA si = {};
	si.cb = sizeof(si);
	PROCESS_INFORMATION pi = {};
	int res = CreateProcessA(
		process.c_str(),  // lpApplicationName
		NULL,             // lpCommandLine
		NULL,             // lpProcessAttributes
		NULL,             // lpThreadAttributes
		TRUE,             // bInheritHandles
		DETACHED_PROCESS, // dwCreationFlags
		NULL,             // lpEnvironment
		NULL,             // lpCurrentDirectory
		&si,              // lpStartupInfo
		&pi               // lpProcessInformation
	);

	// disconnect
	isc_detach_database(status_vect, &db_handle);
}


void connect2()
{
	isc_db_handle db_handle = nullptr;
	char pdb[1] = { isc_dpb_version1 };

	ISC_STATUS status_vect[StatusLen] = {};

	// connect
	isc_attach_database( // <- ВИСНЕТ ЗДЕСЬ!
		status_vect,
		server_and_path.size(),
		server_and_path.c_str(),
		&db_handle,
		sizeof(pdb),
		pdb
	);

	// сюда уже не доходит :-(
	isc_detach_database(status_vect, &db_handle);
}


int main(int argc, char* argv[])
{
	connect1();
	connect2();
	return 0;
}

...
Рейтинг: 0 / 0
09.04.2015, 12:31
    #38931767
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
В трекер занесёшь ?
...
Рейтинг: 0 / 0
09.04.2015, 14:18
    #38931918
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен pdb файл для ODBC-драйвера
ArtDenЕсли даже с bInheritHandles = FALSE заработает, то меня такой вариант не устроит, потому что придется городить свой велосипед для работы с консольными потоками.Не понято - у тебя дочерний поток пишет в консоль родителю ? Уверен, что не наоборот ?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужен pdb файл для ODBC-драйвера / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]