Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / OO API FB3 Освобождение объекта транзакции после rollback / 7 сообщений из 7, страница 1 из 1
26.09.2017, 12:56
    #39526358
Tonal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OO API FB3 Освобождение объекта транзакции после rollback
Нужно ли вызывать release() после rollback ?

ITransaction имеет интерфейс IReferenceCounted , следовательно нуждается в вызове release() после окончан6ия использования.
Но, если смотреть в примеры, можно заметит следующий шаблон использования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ITransaction* tra = NULL;
...
tra->commit(&status);
tra = NULL;
...
if (tra)
  tra->release();


Из чего можно заключить, что после commit вызывать release() не нужно.

Но вызовов rollback в примерах нету.
Напрашивается мысля, что действовать нужно но аналогии с commit .
Или я не прав?
...
Рейтинг: 0 / 0
26.09.2017, 13:03
    #39526368
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OO API FB3 Освобождение объекта транзакции после rollback
Tonal,

commit и rollback уменьшают счётчик ссылок, release после них вызывать не нужно.

release нужен если
1. была получена дополнительная ссылка на объект
2. commit\rollback завершился с ошибкой (например коннект уже помер) и нужно очистить память клиента

PS Насколько я помню, rollback не даёт ошибок

PPS С курсорами, запросами, аттачем - всё так же
...
Рейтинг: 0 / 0
26.09.2017, 13:27
    #39526390
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OO API FB3 Освобождение объекта транзакции после rollback
Tonal
Код: plaintext
1.
tra->commit(&status);



hvladrelease нужен если .... commit\rollback завершился с ошибкой

Результат функции проверять не нужно, там будет C++ exception брошен обязательно ?
...
Рейтинг: 0 / 0
26.09.2017, 13:31
    #39526398
Tonal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OO API FB3 Освобождение объекта транзакции после rollback
AriochРезультат функции проверять не нужно, там будет C++ exception брошен обязательно ?
там void в сигнатуре - так что только исключение.
...
Рейтинг: 0 / 0
26.09.2017, 13:37
    #39526403
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OO API FB3 Освобождение объекта транзакции после rollback
AriochTonal
Код: plaintext
1.
tra->commit(&status);




hvladrelease нужен если .... commit\rollback завершился с ошибкой

Результат функции проверять не нужно, там будет C++ exception брошен обязательно ?Зависит от реального типа status.
По-умолчанию там Firebird::CheckStatusWrapper, который не бросает исключение, т.е. нужно проверять сам status:
Код: plaintext
1.
if (status->getState() & Firebird::IStatus::STATE_ERRORS)
...
Рейтинг: 0 / 0
26.09.2017, 13:43
    #39526408
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OO API FB3 Освобождение объекта транзакции после rollback
hvladПо-умолчанию там Firebird::CheckStatusWrapperУточню - есть выбор между ThrowStatusWrapper и CheckStatusWrapper, первый сам проверяет статус и бросает исключение, второй этого не делает.
...
Рейтинг: 0 / 0
26.09.2017, 13:57
    #39526420
Tonal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OO API FB3 Освобождение объекта транзакции после rollback
hvlad,

В примерах используется как раз ThrowStatusWrapper .
Так что будем знать про возможность выбора. :)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / OO API FB3 Освобождение объекта транзакции после rollback / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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