This is an automated email from the ASF dual-hosted git repository.
paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 65abcf0d1 fix(r/adbcdrivermanager): replace non-API
`Rf_findVarInFrame` call for R 4.5.0 or later (#4130)
65abcf0d1 is described below
commit 65abcf0d1b71c9159e7d06893602390c3e16d359
Author: eitsupi <[email protected]>
AuthorDate: Tue Mar 24 10:21:57 2026 +0900
fix(r/adbcdrivermanager): replace non-API `Rf_findVarInFrame` call for R
4.5.0 or later (#4130)
Fix #4122
---------
Co-authored-by: Dewey Dunnington <[email protected]>
---
r/adbcdrivermanager/src/radbc.cc | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/r/adbcdrivermanager/src/radbc.cc b/r/adbcdrivermanager/src/radbc.cc
index 3010c5964..22565cde6 100644
--- a/r/adbcdrivermanager/src/radbc.cc
+++ b/r/adbcdrivermanager/src/radbc.cc
@@ -18,6 +18,7 @@
#define R_NO_REMAP
#include <R.h>
#include <Rinternals.h>
+#include <Rversion.h>
#include <cstring>
#include <string>
@@ -53,10 +54,20 @@ static int adbc_update_parent_child_count(SEXP xptr, int
delta) {
return NA_INTEGER;
}
- SEXP child_count_sexp = Rf_findVarInFrame(parent_env,
Rf_install(".child_count"));
+ SEXP child_count_sym = PROTECT(Rf_install(".child_count"));
+#if defined(R_VERSION) && R_VERSION >= R_Version(4, 5, 0)
+ SEXP child_count_sexp =
+ PROTECT(R_getVarEx(child_count_sym, parent_env, FALSE, R_UnboundValue));
+ if (child_count_sexp == R_UnboundValue) {
+ Rf_error("Internal error: .child_count not found");
+ }
+#else
+ SEXP child_count_sexp = PROTECT(Rf_findVarInFrame(parent_env,
child_count_sym));
+#endif
int* child_count = INTEGER(child_count_sexp);
int old_value = child_count[0];
child_count[0] = child_count[0] + delta;
+ UNPROTECT(2);
return old_value;
}