Opened 7 years ago

Closed 5 years ago

#3285 closed defect (fixed)

r.viewshed crashes when using DEM linked with r.external

Reported by: neteler Owned by: grass-dev@…
Priority: normal Milestone: 7.2.4
Component: Raster Version: svn-releasebranch72
Keywords: r.viewshed, r.external Cc:
CPU: x86-64 Platform: Unspecified

Description

As a followup of http://hub.qgis.org/issues/15787

# test case
grass72 ~/grassdata/nc_spm_08_grass7/user1/

g.region raster=elevation
r.out.gdal input=elevation output=nc_elevation.tif create="COMPRESS=DEFLATE"

r.external input=~/nc_elevation.tif output=nc_elevation

g.region -c
center easting:  637500.000000
center northing: 221750.000000

r.viewshed input=nc_elevation coordinates=637500.0,221750.0 output=viewshed
Computing events...
 100%
*** Error in `r.viewshed': free(): invalid pointer: 0x0000000002371d78 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x791fb)[0x7f93ac19d1fb]
/lib64/libc.so.6(+0x8288a)[0x7f93ac1a688a]
/lib64/libc.so.6(cfree+0x4c)[0x7f93ac1aa2bc]
r.viewshed(_ZdlPv+0xfc)[0x42387a]
/lib64/libgdal.so.20(_ZN23GDALArrayBandBlockCache10FlushBlockEiii+0xba)[0x7f9398bafbda]
/lib64/libgdal.so.20(_ZN23GDALArrayBandBlockCache10FlushCacheEv+0x7b)[0x7f9398bafc6b]
/lib64/libgdal.so.20(_ZN11GDALDataset10FlushCacheEv+0x53)[0x7f9398bc2933]
/lib64/libgdal.so.20(_ZN14GDALPamDataset10FlushCacheEv+0x9)[0x7f9398bed249]
/lib64/libgdal.so.20(_ZN12GTiffDataset18FlushCacheInternalEb+0x31)[0x7f9398946c21]
/lib64/libgdal.so.20(_ZN12GTiffDataset8FinalizeEv+0x9a)[0x7f939893dcba]
/lib64/libgdal.so.20(_ZN12GTiffDatasetD1Ev+0x17)[0x7f939893e107]
/lib64/libgdal.so.20(_ZN12GTiffDatasetD0Ev+0x9)[0x7f939893e1b9]
/home/neteler/software/grass72/dist.x86_64-pc-linux-gnu/lib/libgrass_raster.7.2.1svn.so(Rast_close_gdal_link+0xe)[0x7f93acfecd2e]
/home/neteler/software/grass72/dist.x86_64-pc-linux-gnu/lib/libgrass_raster.7.2.1svn.so(+0xbe5f)[0x7f93acfe4e5f]
r.viewshed(_Z25init_event_list_in_memoryP6event_PcP10viewpoint_P11grid_header12viewOptions_PPPfP23memory_visibility_grid_+0xce8)[0x41567f]
r.viewshed(_Z18viewshed_in_memoryPcP11grid_headerP10viewpoint_12viewOptions_+0x222)[0x41c566]
r.viewshed(main+0x569)[0x4180ad]
/lib64/libc.so.6(__libc_start_main+0xf1)[0x7f93ac144401]
r.viewshed(_start+0x2a)[0x408caa]
======= Memory map: ========
00400000-0042f000 r-xp 00000000 08:03 24529208                           /home/neteler/software/grass72/dist.x86_64-pc-linux-gnu/bin/r.viewshed
0062f000-00630000 r--p 0002f000 08:03 24529208                           /home/neteler/software/grass72/dist.x86_64-pc-linux-gnu/bin/r.viewshed
00630000-00631000 rw-p 00030000 08:03 24529208                           /home/neteler/software/grass72/dist.x86_64-pc-linux-gnu/bin/r.viewshed
00631000-00633000 rw-p 00000000 00:00 0 
01b06000-02b77000 rw-p 00000000 00:00 0                                  [heap]
7f9370000000-7f9370021000 rw-p 00000000 00:00 0 
7f9370021000-7f9374000000 ---p 00000000 00:00 0 
7f9377a70000-7f9377a77000 r-xp 00000000 08:04 2753232                    /usr/lib/gdalplugins/gdal_GRASS.so
7f9377a77000-7f9377c77000 ---p 00007000 08:04 2753232                    /usr/lib/gdalplugins/gdal_GRASS.so
7f9377c77000-7f9377c78000 r--p 00007000 08:04 2753232                    /usr/lib/gdalplugins/gdal_GRASS.so
7f9377c78000-7f9377c79000 rw-p 00008000 08:04 2753232                    /usr/lib/gdalplugins/gdal_GRASS.so
7f9377c79000-7f9377e65000 r-xp 00000000 08:04 1969032                    /usr/lib64/libfftw3.so.3.5.5
7f9377e65000-7f9378064000 ---p 001ec000 08:04 1969032                    /usr/lib64/libfftw3.so.3.5.5
7f9378064000-7f9378075000 r--p 001eb000 08:04 1969032                    /usr/lib64/libfftw3.so.3.5.5
7f9378075000-7f9378076000 rw-p 001fc000 08:04 1969032                    /usr/lib64/libfftw3.so.3.5.5
7f9378076000-7f9378084000 r-xp 00000000 08:04 1984818                    /usr/lib64/libgrass_ccmath.7.2.0.so
7f9378084000-7f9378284000 ---p 0000e000 08:04 1984818                    /usr/lib64/libgrass_ccmath.7.2.0.so
7f9378284000-7f9378285000 r--p 0000e000 08:04 1984818                    /usr/lib64/libgrass_ccmath.7.2.0.so
7f9378285000-7f9378286000 rw-p 00000000 00:00 0 
7f9378286000-7f937828b000 r-xp 00000000 08:04 1984168                    /usr/lib64/libgrass_btree2.7.2.0.so
7f937828b000-7f937848b000 ---p 00005000 08:04 1984168                    /usr/lib64/libgrass_btree2.7.2.0.so
7f937848b000-7f937848c000 r--p 00005000 08:04 1984168                    /usr/lib64/libgrass_btree2.7.2.0.so
7f937848c000-7f937848d000 rw-p 00000000 00:00 0 
7f937848d000-7f9378495000 r-xp 00000000 08:04 1984916                    /usr/lib64/libgrass_datetime.7.2.0.so
7f9378495000-7f9378694000 ---p 00008000 08:04 1984916                    /usr/lib64/libgrass_datetime.7.2.0.so
7f9378694000-7f9378695000 r--p 00007000 08:04 1984916                    /usr/lib64/libgrass_datetime.7.2.0.so
7f9378695000-7f9378696000 rw-p 00000000 00:00 0 
7f9378696000-7f93786dc000 r-xp 00000000 08:04 1985336                    /usr/lib64/libgrass_gis.7.2.0.so
7f93786dc000-7f93788db000 ---p 00046000 08:04 1985336                    /usr/lib64/libgrass_gis.7.2.0.so
7f93788db000-7f93788dd000 r--p 00045000 08:04 1985336                    /usr/lib64/libgrass_gis.7.2.0.so
7f93788dd000-7f93788de000 rw-p 00047000 08:04 1985336                    /usr/lib64/libgrass_gis.7.2.0.so
7f93788de000-7f93788f1000 r-xp 00000000 08:04 1985347                    /usr/lib64/libgrass_gmath.7.2.0.so
7f93788f1000-7f9378af0000 ---p 00013000 08:04 1985347                    /usr/lib64/libgrass_gmath.7.2.0.so
7f9378af0000-7f9378af1000 r--p 00012000 08:04 1985347                    /usr/lib64/libgrass_gmath.7.2.0.so
7f9378af1000-7f9378af2000 rw-p 00013000 08:04 1985347                    /usr/lib64/libgrass_gmath.7.2.0.so
7f9378af2000-7f9378afa000 r-xp 00000000 08:04 1985365                    /usr/lib64/libgrass_gproj.7.2.0.so
7f9378afa000-7f9378cf9000 ---p 00008000 08:04 1985365                    /usr/lib64/libgrass_gproj.7.2.0.so
7f9378cf9000-7f9378cfa000 r--p 00007000 08:04 1985365                    /usr/lib64/libgrass_gproj.7.2.0.so
7f9378cfa000-7f9378cfb000 rw-p 00008000 08:04 1985365                    /usr/lib64/libgrass_gproj.7.2.0.so
7f9378cfb000-7f9378d0c000 r-xp 00000000 08:04 1985380                    /usr/lib64/libgrass_imagery.7.2.0.so
7f9378d0c000-7f9378f0b000 ---p 00011000 08:04 1985380                    /usr/lib64/libgrass_imagery.7.2.0.so
7f9378f0b000-7f9378f0c000 r--p 00010000 08:04 1985380                    /usr/lib64/libgrass_imagery.7.2.0.so
7f9378f0c000-7f9378f0d000 rw-p 00000000 00:00 0 
7f9378f0d000-7f9378f36000 r-xp 00000000 08:04 1987849                    /usr/lib64/libgrass_raster.7.2.0.so
7f9378f36000-7f9379136000 ---p 00029000 08:04 1987849                    /usr/lib64/libgrass_raster.7.2.0.so
7f9379136000-7f9379137000 r--p 00029000 08:04 1987849                    /usr/lib64/libgrass_raster.7.2.0.so
7f9379137000-7f9379138000 rw-p 0002a000 08:04 1987849                    /usr/lib64/libgrass_raster.7.2.0.so
7f9379138000-7f9379149000 r-xp 00000000 08:04 1984919                    /usr/lib64/libgrass_dbmibase.7.2.0.so
7f9379149000-7f9379348000 ---p 00011000 08:04 1984919                    /usr/lib64/libgrass_dbmibase.7.2.0.so
7f9379348000-7f9379349000 r--p 00010000 08:04 1984919                    /usr/lib64/libgrass_dbmibase.7.2.0.so
7f9379349000-7f937934a000 rw-p 00011000 08:04 1984919                    /usr/lib64/libgrass_dbmibase.7.2.0.so
7f937934a000-7f9379354000 r-xp 00000000 08:04 1984923                    /usr/lib64/libgrass_dbmiclient.7.2.0.so
7f9379354000-7f9379553000 ---p 0000a000 08:04 1984923                    /usr/lib64/libgrass_dbmiclient.7.2.0.so
7f9379553000-7f9379554000 r--p 00009000 08:04 1984923                    /usr/lib64/libgrass_dbmiclient.7.2.0.so
7f9379554000-7f9379555000 rw-p 00000000 00:00 0 
7f9379555000-7f9379556000 r-xp 00000000 08:04 1985696                    /usr/lib64/libgrass_linkm.7.2.0.so
7f9379556000-7f9379756000 ---p 00001000 08:04 1985696                    /usr/lib64/libgrass_linkm.7.2.0.so
7f9379756000-7f9379757000 r--p 00001000 08:04 1985696                    /usr/lib64/libgrass_linkm.7.2.0.so
7f9379757000-7f9379758000 rw-p 00002000 08:04 1985696                    /usr/lib64/libgrass_linkm.7.2.0.so
7f9379758000-7f9379761000 r-xp 00000000 08:04 1988812                    /usr/lib64/libgrass_rtree.7.2.0.so
7f9379761000-7f9379961000 ---p 00009000 08:04 1988812                    /usr/lib64/libgrass_rtree.7.2.0.so
7f9379961000-7f9379962000 r--p 00009000 08:04 1988812                    /usr/lib64/libgrass_rtree.7.2.0.so
7f9379962000-7f9379963000 rw-p 00000000 00:00 0 
7f9379963000-7f937997b000 r-xp 00000000 08:04 1984953                    
[...]

7f9386f53000-7f9386f54000 rw-p 00000000 00:00 0 
7f9386f54000-7f9386f77000 r-xp 00000000 08:04 1990869                    /usr/lib64/libnghttp2.so.14.9.0
7f9386f77000-7f9387176000 ---p 00023000 08:04 1990869                    /usr/lib64/libnghttp2.so.14.9.0
7f9387176000-7f9387177000 r--p 00022000 08:04 1990869                    /usr/lib64/libnghttp2.so.14.9.0
7f9387177000-7f9387179000 rw-p 00023000 08:04 1990869                    /usr/lib64/libnghttp2.so.14.9.0
7f9387179000-7f938717d000 r-xp 00000000 08:04 1998466                    /usr/lib64/libuuid.so.1.3.0
7f938717d000-7f938737c000 ---p 00004000 08:04 1998466                    /usr/lib64/libuuid.so.1.3.0
7f938737c000-7f938737d000 r--p 00003000 08:04 1998466                    /usr/lib64/libuuid.so.1.3.0
7f938737d000-7f938737e000 rw-p 00000000 00:00 0 
7f938737e000-7f93873d3000 r-xp 00000000 08:04 2020800                    /usr/lib64/libldap_r-2.4.so.2.10.7Aborted (core dumped)

A quick gdb (I'd need to recompile with debugging symbols "on" but maybe it already indicates the problematic code area):

(gdb) bt
#0  0x00007ffff6d2d91f in raise () from /lib64/libc.so.6
#1  0x00007ffff6d2f51a in abort () from /lib64/libc.so.6
#2  0x00007ffff6d71200 in __libc_message () from /lib64/libc.so.6
#3  0x00007ffff6d7a88a in _int_free () from /lib64/libc.so.6
#4  0x00007ffff6d7e2bc in free () from /lib64/libc.so.6
#5  0x000000000042387a in operator delete (ptr=0xe9edc0) at mm.cpp:427
#6  0x00007fffe3783bda in GDALArrayBandBlockCache::FlushBlock(int, int, int) () from /lib64/libgdal.so.20
#7  0x00007fffe3783c6b in GDALArrayBandBlockCache::FlushCache() () from /lib64/libgdal.so.20
#8  0x00007fffe3796933 in GDALDataset::FlushCache() () from /lib64/libgdal.so.20
#9  0x00007fffe37c1249 in GDALPamDataset::FlushCache() () from /lib64/libgdal.so.20
#10 0x00007fffe351ac21 in GTiffDataset::FlushCacheInternal(bool) () from /lib64/libgdal.so.20
#11 0x00007fffe3511cba in GTiffDataset::Finalize() () from /lib64/libgdal.so.20
#12 0x00007fffe3512107 in GTiffDataset::~GTiffDataset() () from /lib64/libgdal.so.20
#13 0x00007fffe35121b9 in GTiffDataset::~GTiffDataset() () from /lib64/libgdal.so.20
#14 0x00007ffff7bc0d2e in Rast_close_gdal_link () from /home/neteler/software/grass72/dist.x86_64-pc-linux-gnu/lib/libgrass_raster.7.2.1svn.so
#15 0x00007ffff7bb8e5f in close_old () from /home/neteler/software/grass72/dist.x86_64-pc-linux-gnu/lib/libgrass_raster.7.2.1svn.so
#16 0x000000000041567f in init_event_list_in_memory (eventList=0x7fffe42ac010, rastName=0x7fffffffc5c0 "nc_elevation", vp=0x7fffffffc5b0, hd=0x647170, viewOptions=..., 
    data=0x7fffffffa980, visgrid=0x647360) at grass.cpp:373
#17 0x000000000041c566 in viewshed_in_memory (inputfname=0x7fffffffc5c0 "nc_elevation", hd=0x647170, vp=0x7fffffffc5b0, viewOptions=...) at viewshed.cpp:230
#18 0x00000000004180ad in main (argc=4, argv=0x7fffffffd9b8) at main.cpp:252

Change History (6)

comment:1 by martinl, 7 years ago

Milestone: 7.2.17.2.2

comment:2 by neteler, 7 years ago

Milestone: 7.2.27.2.3

Ticket retargeted after milestone closed

in reply to:  description comment:3 by mmetz, 6 years ago

Replying to neteler:

As a followup of http://hub.qgis.org/issues/15787

# test case
grass72 ~/grassdata/nc_spm_08_grass7/user1/

g.region raster=elevation
r.out.gdal input=elevation output=nc_elevation.tif create="COMPRESS=DEFLATE"

r.external input=~/nc_elevation.tif output=nc_elevation

g.region -c
center easting:  637500.000000
center northing: 221750.000000

r.viewshed input=nc_elevation coordinates=637500.0,221750.0 output=viewshed
Computing events...
 100%
*** Error in `r.viewshed': free(): invalid pointer: 0x0000000002371d78 ***
[...]

A quick gdb (I'd need to recompile with debugging symbols "on" but maybe it already indicates the problematic code area):

(gdb) bt
#0  0x00007ffff6d2d91f in raise () from /lib64/libc.so.6
#1  0x00007ffff6d2f51a in abort () from /lib64/libc.so.6
#2  0x00007ffff6d71200 in __libc_message () from /lib64/libc.so.6
#3  0x00007ffff6d7a88a in _int_free () from /lib64/libc.so.6
#4  0x00007ffff6d7e2bc in free () from /lib64/libc.so.6
#5  0x000000000042387a in operator delete (ptr=0xe9edc0) at mm.cpp:427
#6  0x00007fffe3783bda in GDALArrayBandBlockCache::FlushBlock(int, int, int) () from /lib64/libgdal.so.20
[...]

The iostream lib caused the problem: GDAL used the operator delete from iostream lib on an object that was not allocated with the operator new from iostream lib. Fixed in trunk r71625. Maybe that custom memory manager of iostream lib should be removed altogether.

comment:4 by martinl, 6 years ago

Milestone: 7.2.3

Ticket retargeted after milestone closed

comment:5 by martinl, 6 years ago

Milestone: 7.2.4

comment:6 by annakrat, 5 years ago

Resolution: fixed
Status: newclosed

Seems fixed, reopen if needed.

Note: See TracTickets for help on using tickets.