diff --git a/mdbx.h b/mdbx.h index 5a956e64..6908f969 100644 --- a/mdbx.h +++ b/mdbx.h @@ -4583,17 +4583,24 @@ typedef int(MDBX_subdb_enum_func)(void *ctx, const MDBX_txn *txn, const struct MDBX_stat *stat, MDBX_dbi dbi) MDBX_CXX17_NOEXCEPT; -/** \brief Enumerate the entries in the reader lock table. +/** \brief Перечисляет пользовательские именнованные таблицы. + * + * Производит перечисление пользовательских именнованных таблиц, вызывая + * специфицируемую пользователем функцию-визитер для каждой именованной таблицы. + * Перечисление продолжается до исчерпания именованных таблиц, либо до возврата + * отличного от нуля результата из заданной пользователем функции, которое будет + * сразу возвращено в качестве результата. + * * \ingroup c_statinfo * \see MDBX_subdb_enum_func * * \param [in] txn Транзакция запущенная посредством * \ref mdbx_txn_begin(). - * \param [in] func Указатель на пользовательскую функцию-перечислитель + * \param [in] func Указатель на пользовательскую функцию * с сигнатурой \ref MDBX_subdb_enum_func, * которая будет вызвана для каждой таблицы. * \param [in] ctx Указатель на некоторый контект, который будет передан - * в функцию-перечислитель как есть. + * в функцию `func()` как есть. * * \returns Ненулевое значение кода ошибки, либо 0 при успешном выполнении. */ LIBMDBX_API int mdbx_enumerate_subdb(const MDBX_txn *txn, diff --git a/src/dbi.c b/src/dbi.c index 9a6d0169..ffd1ca6a 100644 --- a/src/dbi.c +++ b/src/dbi.c @@ -1026,9 +1026,11 @@ __cold int mdbx_enumerate_subdb(const MDBX_txn *txn, MDBX_subdb_enum_func *func, stat_get(tree, &stat, sizeof(stat)); rc = func(ctx, txn, &name, tree->flags, &stat, dbi); if (rc != MDBX_SUCCESS) - break; + goto bailout; } - txn->cursors[MAIN_DBI] = cx.outer.next; + rc = (rc == MDBX_NOTFOUND) ? MDBX_SUCCESS : rc; - return (rc == MDBX_NOTFOUND) ? MDBX_SUCCESS : rc; + bailout: + txn->cursors[MAIN_DBI] = cx.outer.next; + return rc; }