diff --git a/r/adbcdrivermanager/src/radbc.cc b/r/adbcdrivermanager/src/radbc.cc index da27e4d04b..021b1e8618 100644 --- a/r/adbcdrivermanager/src/radbc.cc +++ b/r/adbcdrivermanager/src/radbc.cc @@ -112,12 +112,13 @@ extern "C" SEXP RAdbcLoadDriver(SEXP driver_name_sexp, SEXP entrypoint_sexp) { } extern "C" SEXP RAdbcLoadDriverFromInitFunc(SEXP driver_init_func_xptr) { - auto driver_init_func = - reinterpret_cast(R_ExternalPtrAddrFn(driver_init_func_xptr)); if (!Rf_inherits(driver_init_func_xptr, "adbc_driver_init_func")) { Rf_error("Expected external pointer with class '%s'", "adbc_driver_init_func"); } + auto driver_init_func = + reinterpret_cast(R_ExternalPtrAddrFn(driver_init_func_xptr)); + SEXP driver_xptr = PROTECT(adbc_allocate_xptr()); R_RegisterCFinalizer(driver_xptr, &finalize_driver_xptr); auto driver = adbc_from_xptr(driver_xptr); @@ -148,12 +149,13 @@ extern "C" SEXP RAdbcDatabaseNew(SEXP driver_init_func_xptr) { adbc_error_stop(status, &error); if (driver_init_func_xptr != R_NilValue) { - auto driver_init_func = - reinterpret_cast(R_ExternalPtrAddrFn(driver_init_func_xptr)); if (!Rf_inherits(driver_init_func_xptr, "adbc_driver_init_func")) { Rf_error("Expected external pointer with class '%s'", "adbc_driver_init_func"); } + auto driver_init_func = + reinterpret_cast(R_ExternalPtrAddrFn(driver_init_func_xptr)); + status = AdbcDriverManagerDatabaseSetInitFunc(database, driver_init_func, &error); adbc_error_stop(status, &error); }