Markus Neteler wrote: > >> using the DTM map registered with r.external, I get sometimes (not sure on > >> what it depends), a Segmentation fault: > > > >> Program received signal SIGSEGV, Segmentation fault. > >> [Switching to Thread 47745198216448 (LWP 24661)] > >> 0x00002b6c8556ebcb in free () from /lib64/libc.so.6 > >> (gdb) bt > >> #0 0x00002b6c8556ebcb in free () from /lib64/libc.so.6 > >> #1 0x00002b6c83f0c09b in G_free (buf=0x7c7c668c) at alloc.c:130 > >> #2 0x00002b6c83f112e5 in close_old (fd=8) at closecell.c:144 > > > > 143 if (fcb->cellhd.compressed) > > 144 G_free(fcb->row_ptr); > > > > The compressed field should always be zero. > > > > r.external should always set it to zero in the cellhd file, and for a > > map opened for read, the cellhd structure should contain exactly what > > is in the file. > > This seems to be the case: > > [EMAIL PROTECTED] grassdata]$ cd patUTM32/PERMANENT/cellhd/ > [EMAIL PROTECTED] cellhd]$ cat pat_DTM_5m > proj: 1 > zone: 32 > north: 5157086 > south: 5059541 > east: 730098 > west: 612488 > cols: 23522 > rows: 19509 > e-w resol: 5 > n-s resol: 5 > format: -1 > compressed: 0
So it appears that something is modifying fcb->cellhd.compressed. But I have no idea what. For an input map, nothing explicitly modifies that field after the structure has been read from the file, and I can't see any plausible memory corruption scenario. d.rast should only have a single raster open, so the preceding G__.fileinfo[] slots should be unused (AFAICT, the fact that it's getting fd=8 is due to additional descriptors used by gdb). The only array in "struct fileinfo" is NULL_ROWS, but if the map is a GDAL link, the only code which modifies that uses "for (i = 0; i < NULL_ROWS_INMEM; i++)", so it can't overflow the array. -- Glynn Clements <[EMAIL PROTECTED]> _______________________________________________ grass-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/grass-dev
