OCIDESCRIPTORFREE CRASHED INSTEAD OF RETURNING OCI_INVALID_HANDLE - PullRequest
1 голос
/ 23 марта 2020

ПРОБЛЕМА: вызов OCIDescriptorFree (), иногда он не возвращает OCI_INVALID_HANDLE вместо sh программы. Программа вылетает. Стек: kpufhndl, kpufhndl, OCIDescriptorFree,…, main

Пример кода: OCILobLocator * loblo c = 0; OCIDescriptorAllo c ((dvoid *) phandle-> envhp, (dvoid **) & loblo c, OCI_DTYPE_LOB, 0, NULL); ……… (Может быть, потеряно соединение, а затем переподключено)… OCIDescriptorFree ((dvoid *) loblo c, OCI_DTYPE_LOB);

Воспроизведено на Windows Сервер 2012, Oracle СУБД 12.1.0.2, Клиент 12.2 .0.1.

Согласно ошибке 10144882, cra sh из OCIDescriptorFree должен быть уже исправлен в 12.1.0.2. (https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=97595593912668&id=10144882.8&displayIndex=2&_afrWindowMode=0&_adf.ctrl-state=17pq5lo8dx_2732)

Что такое лог c внутри функции OCIDescriptorFree ()? Когда приложение вызывает OCIDescriptorFree (), как оно проверяет адрес, переданный параметром (dvoid * descp)? Помещает ли оно его в место (например, вектор), когда OCIDescriptorAllo c (), и затем проверяет его в соответствии с записью в месте (например, вектор) в следующем OCIDescriptorFree ()? Если проверки в OCIDescriptorFree () уже достаточно, при каких обстоятельствах вызов OCIDescriptorFree () вызовет cra sh dump?

...