iuke-tier@ey m@iii@g oii uiow@@edu
2021-May-28 13:41 UTC
[Rd] [External] Possible ALTREP bug
integer and real Elt methods are not expected to allocate. You would have to suspend GC to be able to do that. This currently can't be done from package code. Best, luke On Fri, 28 May 2021, G?bor Cs?rdi wrote:> I have found some weird SEXP corruption behavior with ALTREP, which > could be a bug. (Or I could be doing something wrong.) > > I have an integer ALTREP vector that calls back to R from the Elt > method. When this vector is indexed in a lapply(), its first element > gets corrupted. Sometimes it's just a type change to logical, but > sometimes the corruption causes a crash. > > I saw this on macOS from R 3.5.3 to 4.2.0. I created a small package > that demonstrates this: https://github.com/gaborcsardi/redfish > > The R callback in this package calls `loadNamespace("Matrix")`, but > the same crash happens for other packages as well, and sometimes it > also happens if I don't load any packages at all. (But that example > was much more complicated, so I went with the package loading.) > > It is somewhat random, and sometimes turning off the JIT avoids the > crash, but not always. > > Hopefully I am just doing something wrong in the ALTREP code (see > https://github.com/gaborcsardi/redfish/blob/main/src/test.c), and it > is not actually a bug. > > Thanks, > Gabor > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
Thank you Luke, that makes a lot of sense, Gabor On Fri, May 28, 2021 at 3:41 PM <luke-tierney at uiowa.edu> wrote:> > integer and real Elt methods are not expected to allocate. You would > have to suspend GC to be able to do that. This currently can't be done > from package code. > > Best, > > luke > > On Fri, 28 May 2021, G?bor Cs?rdi wrote: > > > I have found some weird SEXP corruption behavior with ALTREP, which > > could be a bug. (Or I could be doing something wrong.) > > > > I have an integer ALTREP vector that calls back to R from the Elt > > method. When this vector is indexed in a lapply(), its first element > > gets corrupted. Sometimes it's just a type change to logical, but > > sometimes the corruption causes a crash. > > > > I saw this on macOS from R 3.5.3 to 4.2.0. I created a small package > > that demonstrates this: https://github.com/gaborcsardi/redfish > > > > The R callback in this package calls `loadNamespace("Matrix")`, but > > the same crash happens for other packages as well, and sometimes it > > also happens if I don't load any packages at all. (But that example > > was much more complicated, so I went with the package loading.) > > > > It is somewhat random, and sometimes turning off the JIT avoids the > > crash, but not always. > > > > Hopefully I am just doing something wrong in the ALTREP code (see > > https://github.com/gaborcsardi/redfish/blob/main/src/test.c), and it > > is not actually a bug. > > > > Thanks, > > Gabor > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > -- > Luke Tierney > Ralph E. Wareham Professor of Mathematical Sciences > University of Iowa Phone: 319-335-3386 > Department of Statistics and Fax: 319-335-3017 > Actuarial Science > 241 Schaeffer Hall email: luke-tierney at uiowa.edu > Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
>From reading the discussion on the Bioconductor issue tracker it seems likethe reason the GC is not suspended for the non-string ALTREP Elt methods is primarily due to performance concerns. If this is the case perhaps an additional flag could be added to the `R_set_altrep_*()` functions so ALTREP authors could indicate if GC should be halted when that particular method is called for that particular ALTREP class. This would avoid the performance hit (other than a boolean check) for the standard case when no allocations are expected, but allow authors to indicate that R should pause GC if needed for methods in their class. On Fri, May 28, 2021 at 9:42 AM <luke-tierney at uiowa.edu> wrote:> integer and real Elt methods are not expected to allocate. You would > have to suspend GC to be able to do that. This currently can't be done > from package code. > > Best, > > luke > > On Fri, 28 May 2021, G?bor Cs?rdi wrote: > > > I have found some weird SEXP corruption behavior with ALTREP, which > > could be a bug. (Or I could be doing something wrong.) > > > > I have an integer ALTREP vector that calls back to R from the Elt > > method. When this vector is indexed in a lapply(), its first element > > gets corrupted. Sometimes it's just a type change to logical, but > > sometimes the corruption causes a crash. > > > > I saw this on macOS from R 3.5.3 to 4.2.0. I created a small package > > that demonstrates this: https://github.com/gaborcsardi/redfish > > > > The R callback in this package calls `loadNamespace("Matrix")`, but > > the same crash happens for other packages as well, and sometimes it > > also happens if I don't load any packages at all. (But that example > > was much more complicated, so I went with the package loading.) > > > > It is somewhat random, and sometimes turning off the JIT avoids the > > crash, but not always. > > > > Hopefully I am just doing something wrong in the ALTREP code (see > > https://github.com/gaborcsardi/redfish/blob/main/src/test.c), and it > > is not actually a bug. > > > > Thanks, > > Gabor > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > -- > Luke Tierney > Ralph E. Wareham Professor of Mathematical Sciences > University of Iowa Phone: 319-335-3386 > Department of Statistics and Fax: 319-335-3017 > Actuarial Science > 241 Schaeffer Hall email: luke-tierney at uiowa.edu > Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]