[R] R crashes when loading rgl package before minqa package

Ben Bolker bbolker at gmail.com
Thu Sep 30 15:54:46 CEST 2010


Gaspard Lequeux <Gaspard.Lequeux <at> biomath.ugent.be> writes:

> Calling newuoa (from the minqa package) makes R crash when 
> the package rgl 
> is loaded first. This however only on certain selected data.
> 
> The data used for testing (saved to 'bugs.R'):
> 
> xvals =
c(1,2,4,5,7,8,9,10,11,12,14,15,16,18,19,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36)
> 
> yvals =
c(857.7597,975.8624,978.2655,979.3034,965.5919,983.8946,992.2512,
992.1178,979.5379,974.4269,968.4113,991.5210,977.3361,985.7800,
975.5220,974.6880,973.8102,980.7295,982.0034,984.7993,978.4948,
970.4351,969.0718,983.7892,976.3637,980.7833,987.1665,976.6000,
975.1332,971.0757,989.4693)
> 
> initpar = c(-5.1471384, -3861.8905839, 979.2616002, 0.2572355, 27.5705764)
> 
> optimft <- function(x) {
>    yft = x[2] + (x[3] - x[2])/((1 + exp(x[1] * (log(xvals) - log(x[4]))))^x[5])
>    return(sum((yvals - yft)^2))
> }
> 
> Sequence of commands needed to make the bug appear:
> 
> <Start R>
> source('bugs.R')
> library(minqa)
> library(rgl)
> newuoa(initpar, optimft)
>   => OK
> 
> <Start R>
> source('bugs.R')
> library(rgl)
> library(minqa)
> newuoa(initpar, optimft)
>    => Crash: segfault: address 0x18, cause 'memory not mapped'
> 
> I found the bug using the package qpcR, where rgl is loaded when loading 
> qpcR while minqa is only loaded later, when needed.
> 
> Running on Debian squeeze 64 bit.
> R version: R version 2.11.1 (2010-05-31) x86_64-pc-linux-gnu
> rgl version: 0.91
> minqa version:  1.1.9
> Rcpp version: 0.8.6 (loaded by minqa)
> 
> Kind regards,
> 
> Gaspard Lequeux

  Duplicated on Ubuntu 10.04
> sessionInfo()
R version 2.11.1 (2010-05-31) 
i486-pc-linux-gnu 

locale:
 [1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_CA.UTF-8        LC_COLLATE=en_CA.UTF-8    
 [5] LC_MONETARY=C              LC_MESSAGES=en_CA.UTF-8   
 [7] LC_PAPER=en_CA.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] minqa_1.1.9  Rcpp_0.8.6   rgl_0.91.787

  Running valgrind:

bolker at ubuntu-10:~/R/misc$ R -d valgrind --vanilla
==26985== Memcheck, a memory error detector
==26985== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==26985== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for
copyright info
==26985== Command: /usr/lib/R/bin/exec/R --vanilla
==26985== 

R version 2.11.1 (2010-05-31)
[snip startup info]

> xvals =
c(1,2,4,5,7,8,9,10,11,12,14,15,16,18,19,21,22,23,
24,25,26,27,28,29,30,31,32,33,34,35,36)
> 
> yvals =
c(857.7597,975.8624,978.2655,979.3034,965.5919,
983.8946,992.2512,992.1178,979.5379,974.4269,968.4113,
991.5210,977.3361,985.7800,975.5220,974.6880,973.8102,
980.7295,982.0034,984.7993,978.4948,970.4351,969.0718,
983.7892,976.3637,980.7833,987.1665,976.6000,975.1332,
971.0757,989.4693)
> 
> initpar = c(-5.1471384, -3861.8905839, 979.2616002, 0.2572355, 27.5705764)
> 
> optimft <- function(x) {
+    yft = x[2] + (x[3] - x[2])/((1 + exp(x[1] * (log(xvals) - log(x[4]))))^x[5])
+    return(sum((yvals - yft)^2))
+ }
> 
> library(rgl)
> library(minqa)
Loading required package: Rcpp
> newuoa(initpar, optimft)
==26985== Invalid read of size 4
==26985==    at 0x6763C17: __cxa_allocate_exception (in
/usr/lib/libstdc++.so.6.0.13)
==26985==    by 0x6EC026E: calfun_ (minqa.cpp:30)
==26985==    by 0x6EC4F56: newuob_ (newuob.f:323)
==26985==    by 0x6EC4ADA: newuoa_ (newuoa.f:68)
==26985==    by 0x6EC2350: newuoa_cpp__rcpp__wrapper__(Rcpp::Vector<14>,
Rcpp::Environment, SEXPREC*) (minqa.cpp:120)
==26985==    by 0x6EC27D1: newuoa_cpp (minqa.cpp:110)
==26985==    by 0x40BB170: ??? (in /usr/lib/R/lib/libR.so)
==26985==    by 0x40F20C1: Rf_eval (in /usr/lib/R/lib/libR.so)
==26985==    by 0x40F42BF: ??? (in /usr/lib/R/lib/libR.so)
==26985==    by 0x40F1E37: Rf_eval (in /usr/lib/R/lib/libR.so)
==26985==    by 0x40F5C6F: Rf_applyClosure (in /usr/lib/R/lib/libR.so)
==26985==    by 0x40F1CDC: Rf_eval (in /usr/lib/R/lib/libR.so)
==26985==  Address 0xc is not stack'd, malloc'd or (recently) free'd
==26985== 

 *** caught segfault ***
address 0xc, cause 'memory not mapped'

Traceback:
 1: .Call(newuoa_cpp, par, ctrl, fn1)
 2: newuoa(initpar, optimft)

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection: 

  I strongly suspect that the problem is with minqa, and
that loading rgl is just a way to make the problem surface.

  I may take a look at minqa , but you may want to send an e-mail
to the maintainer [ maintainer("minqa") ] as well ...

  Ben Bolker



More information about the R-help mailing list