From Roger.Bivand@nhh.no  Mon Jul  2 14:27:56 2001
From: Roger.Bivand@nhh.no (Roger.Bivand@nhh.no)
Date: Mon, 2 Jul 2001 15:27:56 +0200 (MET DST)
Subject: [Rd] ReleaseLargeFreeVectors SIGSEGV (?) (PR#1008)
Message-ID: <200107021327.PAA13094@pubhealth.ku.dk>

Full_Name: Roger Bivand
Version: 1.3.0
OS: GNU/Linux RH6.2, 7.0, Debian 2.2
Submission from: (NULL) (158.37.100.64)


I'm working on interfacing ANN: A Library for Approximate Nearest Neighbor
Searching (http://www.cs.umd.edu/~mount/ANN/) to R, following up a prototype
package I tried in May 2000. ANN is written in C++; my C++ is very weak. Last
year
I didn't experience any problems with memory management, C++ did
its thing, and R did its. I have today recompiled R 1.1.1, and the original
trial
package installs OK, and all the examples can be run repeatedly with no crash.

Could I please ask for confirmation that this problem is on my package's
side and is not a result of the 1.2.0 and later memory handling changes?

I'm now getting replicable segmentation faults in the following context:

(ftp://reclus.nhh.no/pub/R) ann_0.2-2.tar.gz is the old trial package,
ann_0.2-2.pre3.tar.gz is the same with a single change to the shared libs flag
in
the Makefile, and ann_0.2-3.tar.gz is a revision dropping the makefile, since
R now includes C++ in Makeconf.

ann_0.2-3.tar.gz ran through (1.3.0) R CMD check & R CMD build cleanly. 
The examples now trigger the segfault, or it can be triggered in the older 
version by doing in 1.3.0:

> for (i in 1:100) example(ann)

or

> for (i in 1:100) example(nspairs)

or just by:

for (i in 1:100) an1 <- ann(cbind(runif(5000), runif(5000)), k = 4)


The typical gdb listing (shortened) is:

(in this case from)

> for (i in 1:100) example(nspairs)

nspars> an1 <- ann(cbind(runif(1000), runif(1000)), k = 4)

nspars> nspairs(an1)
[1] 311

nspars> an1 <- ann(cbind(runif(1000), runif(1000)), k = 4)

nspars> nspairs(an1)
[1] 304

....


Program received signal SIGSEGV, Segmentation fault.
0x40111109 in chunk_free (ar_ptr=0x401a5d40, p=0x94723a8) at malloc.c:3111
3111	malloc.c: No such file or directory.
(gdb) bt
#0  0x40111109 in chunk_free (ar_ptr=0x401a5d40, p=0x94723a8) at malloc.c:3111
#1  0x40110f9a in __libc_free (mem=0x94727d0) at malloc.c:3023
#2  0x80a6b60 in ReleaseLargeFreeVectors () at memory.c:673
#3  0x80a82b2 in RunGenCollect (size_needed=2000) at memory.c:1079
#4  0x80a9365 in R_gc_internal (size_needed=2000) at memory.c:1669
#5  0x80a9027 in Rf_allocVector (type=14, length=2000) at memory.c:1541
#6  0x808cb58 in Rf_duplicate (s=0x9548498) at duplicate.c:140
#7  0x80660fa in do_makelist (call=0x8a3f7c0, op=0x81a7c00, args=0x8239258, 
    rho=0x824e510) at builtin.c:367
#8  0x809136f in Rf_eval (e=0x8a3f7c0, rho=0x824e510) at eval.c:424
#9  0x8092cf1 in Rf_evalList (el=0x8a3ee30, rho=0x824e510) at eval.c:1171
#10 0x80912f8 in Rf_eval (e=0x8a3f750, rho=0x824e510) at eval.c:422
#11 0x8091089 in Rf_eval (e=0x824037c, rho=0x8240670) at eval.c:368
#12 0x8090ff4 in Rf_eval (e=0x88211a0, rho=0x8240670) at eval.c:345
#13 0x8092cf1 in Rf_evalList (el=0x8821ddc, rho=0x8240670) at eval.c:1171
#14 0x80912f8 in Rf_eval (e=0x8821dc0, rho=0x8240670) at eval.c:422
#15 0x80a4a9d in do_logic2 (call=0x8821c00, op=0x819f3e8, args=0x8821c1c, 
    env=0x8240670) at logic.c:192
#16 0x809119b in Rf_eval (e=0x8821c00, rho=0x8240670) at eval.c:401
#17 0x8091a64 in do_if (call=0x882292c, op=0x8198d74, args=0x8822948, 
    rho=0x8240670) at eval.c:665
#18 0x809119b in Rf_eval (e=0x882292c, rho=0x8240670) at eval.c:401
#19 0x8092394 in do_begin (call=0x8821820, op=0x819e81c, args=0x8821804, 
) at eval.c:887
...

I have also seen:

Program received signal SIGSEGV, Segmentation fault.
0x40111109 in chunk_free (ar_ptr=0x401a5d40, p=0x8ab0b10) at malloc.c:3111
3111	malloc.c: No such file or directory.
(gdb) bt
#0  0x40111109 in chunk_free (ar_ptr=0x401a5d40, p=0x8ab0b10) at malloc.c:3111
#1  0x40110f9a in __libc_free (mem=0x8ab0b18) at malloc.c:3023
#2  0x40312204 in __builtin_vec_delete (ptr=0x8ab0b18)
   from /usr/local/lib/R/library/ann/libs/ann.so
#3  0x40307b5e in annDeallocPts (pa=@0xbfffd7a0) at ANN.cc:124
#4  0x4030733d in ANN_interface (xp=0x8cd8280, eps=@0x8e2a550, qp=0x8e2a5c8, 
    dnn=0x8d727f0, n_pts=@0x8dc7be8, k=@0x8dc7c08, dim=@0x8dc7c28, 
    q_pts=@0x8dc7c48, bucket_size=@0x8dc7c68, insplit=@0x8dc7c88, 
    inshrink=@0x8dc7ca8, priority=@0x8dc7cc8, maxpts=@0x8dc7ce8, nn=0x8ace0d0)
    at ANN_interface.cc:133
#5  0x808a557 in do_dotCode (call=0x8a3f098, op=0x81a7a5c, args=0x8a3d388, 
    env=0x8a4326c) at dotcode.c:1310
#6  0x809136f in Rf_eval (e=0x8a3f098, rho=0x8a4326c) at eval.c:424
#7  0x8092a67 in do_set (call=0x8a3f044, op=0x819e8c4, args=0x8a3f060, 
    rho=0x8a4326c) at eval.c:1092
....


and annDeallocPts() is the C++ deconstructor where:

void annDeallocPts(ANNpointArray &pa)		// deallocate points
{
    delete [] pa[0];				// dealloc coordinate storage
    delete [] pa;				// dealloc points
    pa = NULL;
}


platform i686-pc-linux-gnu
arch     i686             
os       linux-gnu        
system   i686, linux-gnu  
status                    
major    1                
minor    3.0              
year     2001             
month    06               
day      22     
language R
 
[rsb@reclus rsb]$ gcc -v
Reading specs from /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/specs
gcc version 2.95.3 19991030 (prerelease)
[rsb@reclus rsb]$ rpm -q gcc
gcc-2.95.2-7mdk
[rsb@reclus rsb]$ 

(Same on R 1.3.0 on RH70, gcc 2.96-85, Debian 2.2, gcc 2.95.2)

Debian gdb output:

> for (i in 1:10) an1 <- ann(cbind(runif(5000), runif(5000)), k = 4)

Program received signal SIGSEGV, Segmentation fault.
0x400fbb69 in free () from /lib/libc.so.6
(gdb) bt
#0  0x400fbb69 in free () from /lib/libc.so.6
#1  0x400fb9fd in free () from /lib/libc.so.6
#2  0x80a3210 in ReleaseLargeFreeVectors () at memory.c:673
#3  0x80a4932 in RunGenCollect (size_needed=20000) at memory.c:1079
#4  0x80a59bd in R_gc_internal (size_needed=20000) at memory.c:1669
#5  0x80a5687 in Rf_allocVector (type=14, length=20000) at memory.c:1541
#6  0x808a095 in Rf_duplicate (s=0x8fab148) at duplicate.c:140
#7  0x806a479 in ascommon (call=0x8268740, u=0x8fab148, type=18)
    at coerce.c:954


                


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] ReleaseLargeFreeVectors SIGSEGV (?) (PR#1008)
Roger.Bivand@nhh.no