Roger.Bivand@nhh.no
2001-Jul-02 13:27 UTC
[Rd] ReleaseLargeFreeVectors SIGSEGV (?) (PR#1008)
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 _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._