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;
 }
 

Reply via email to