[GRASS-dev] [GRASS GIS] #2024: r.li.setup generates incomplete r.li conf file

GRASS GIS trac at osgeo.org
Fri Feb 7 03:46:23 PST 2014


#2024: r.li.setup generates incomplete r.li conf file
------------------------+---------------------------------------------------
 Reporter:  matmar      |       Owner:  rashadkm           
     Type:  defect      |      Status:  assigned           
 Priority:  normal      |   Milestone:  6.4.4              
Component:  Raster      |     Version:  svn-releasebranch64
 Keywords:  r.li.setup  |    Platform:  Linux              
      Cpu:  x86-64      |  
------------------------+---------------------------------------------------

Comment(by hamish):

 with @PERMANENT issues fixed/avoided in devbr6, and testing a moving
 window sample with r.li.edgedensity and WORKERS=1, I'm now getting as far
 as a broken pipe error:

 {{{
 *** glibc detected *** r.li.edgedensity: free(): invalid next size
 (normal): 0x000000000265e980 ***

 ...

 (gdb) bt
 #0  0x00007ffff702a8d0 in __write_nocancel () at ../sysdeps/unix/syscall-
 template.S:82
 #1  0x00007ffff755061d in send (pipe=5, m=0x7fffffffa970) at ipc.c:31
 #2  0x00007ffff754e05b in calculateIndex (file=0x604630
 "test_mov_windows", f=0x401401 <edgedensity>, parameters=0x0,
 raster=0x604270 "landuse96_28m",
     output=0x604650 "rli.mov_wind") at daemon.c:208
 #3  0x00000000004013fa in main (argc=4, argv=0x7fffffffdec8) at
 edgedensity.c:70

 ...

 G65:history > valgrind --tool=memcheck  $CMD
 ==14113== Memcheck, a memory error detector
 ==14113== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
 ==14113== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for
 copyright info
 ==14113== Command: r.li.edgedensity map=landuse96_28m
 conf=test_mov_windows output=rli.mov_wind
 ==14113==
 ==14113== Syscall param write(buf) points to uninitialised byte(s)
 ==14113==    at 0x5A028D0: __write_nocancel (syscall-template.S:82)
 ==14113==    by 0x54B861C: send (ipc.c:31)
 ==14113==    by 0x54B5EEA: calculateIndex (daemon.c:167)
 ==14113==    by 0x4013F9: main (edgedensity.c:70)
 ==14113==  Address 0x7feffc8d4 is on thread 1's stack
 ==14113==
 ==14118== Conditional jump or move depends on uninitialised value(s)
 ==14118==    at 0x54B9214: RLI_get_cell_raster_row (worker.c:286)
 ==14118==    by 0x4017D1: calculate (edgedensity.c:189)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 ==14118== Syscall param write(buf) points to uninitialised byte(s)
 ==14118==    at 0x5A028D0: __write_nocancel (syscall-template.S:82)
 ==14118==    by 0x54B861C: send (ipc.c:31)
 ==14118==    by 0x54B8EA5: worker (worker.c:206)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x7feffb364 is on thread 1's stack
 ==14118==
 ==14113== Syscall param write(buf) points to uninitialised byte(s)
 ==14113==    at 0x5A028D0: __write_nocancel (syscall-template.S:82)
 ==14113==    by 0x54B861C: send (ipc.c:31)
 ==14113==    by 0x54B605A: calculateIndex (daemon.c:208)
 ==14113==    by 0x4013F9: main (edgedensity.c:70)
 ==14113==  Address 0x7feffc8d4 is on thread 1's stack
 ==14113==
 ==14118== Invalid write of size 4
 ==14118==    at 0x4E5D630: G_set_c_null_value (null_val.c:147)
 ==14118==    by 0x401726: calculate (edgedensity.c:176)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x6278f04 is 0 bytes after a block of size 2,004
 alloc'd
 ==14118==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)
 ==14118==    by 0x4E3D66C: G__calloc (alloc.c:77)
 ==14118==    by 0x4E3D843: G_allocate_cell_buf (alloc_cell.c:66)
 ==14118==    by 0x4016DC: calculate (edgedensity.c:169)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 ==14118== Invalid read of size 4
 ==14118==    at 0x401A72: calculate (edgedensity.c:242)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x5eb8d64 is 0 bytes after a block of size 2,004
 alloc'd
 ==14118==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)
 ==14118==    by 0x4E3D66C: G__calloc (alloc.c:77)
 ==14118==    by 0x4E3D843: G_allocate_cell_buf (alloc_cell.c:66)
 ==14118==    by 0x54B8D51: worker (worker.c:167)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 ==14118== Invalid read of size 4
 ==14118==    at 0x401975: calculate (edgedensity.c:228)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x5eb8d64 is 0 bytes after a block of size 2,004
 alloc'd
 ==14118==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)
 ==14118==    by 0x4E3D66C: G__calloc (alloc.c:77)
 ==14118==    by 0x4E3D843: G_allocate_cell_buf (alloc_cell.c:66)
 ==14118==    by 0x54B8D51: worker (worker.c:167)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 ==14118== Invalid read of size 4
 ==14118==    at 0x401A93: calculate (edgedensity.c:244)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x6278f04 is 0 bytes after a block of size 2,004
 alloc'd
 ==14118==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)
 ==14118==    by 0x4E3D66C: G__calloc (alloc.c:77)
 ==14118==    by 0x4E3D843: G_allocate_cell_buf (alloc_cell.c:66)
 ==14118==    by 0x4016DC: calculate (edgedensity.c:169)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 ==14118== Invalid read of size 4
 ==14118==    at 0x401AEC: calculate (edgedensity.c:250)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x5eb9584 is 0 bytes after a block of size 2,004
 alloc'd
 ==14118==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)
 ==14118==    by 0x4E3D66C: G__calloc (alloc.c:77)
 ==14118==    by 0x4E3D843: G_allocate_cell_buf (alloc_cell.c:66)
 ==14118==    by 0x54B8D51: worker (worker.c:167)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 ==14118== Invalid read of size 4
 ==14118==    at 0x401C87: calculate (edgedensity.c:316)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x5eb8d64 is 0 bytes after a block of size 2,004
 alloc'd
 ==14118==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)
 ==14118==    by 0x4E3D66C: G__calloc (alloc.c:77)
 ==14118==    by 0x4E3D843: G_allocate_cell_buf (alloc_cell.c:66)
 ==14118==    by 0x54B8D51: worker (worker.c:167)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 ==14118== Invalid write of size 4
 ==14118==    at 0x4E5D630: G_set_c_null_value (null_val.c:147)
 ==14118==    by 0x401829: calculate (edgedensity.c:197)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==  Address 0x6279b14 is 0 bytes after a block of size 2,004
 alloc'd
 ==14118==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)
 ==14118==    by 0x4E3D66C: G__calloc (alloc.c:77)
 ==14118==    by 0x4E3D843: G_allocate_cell_buf (alloc_cell.c:66)
 ==14118==    by 0x4017DF: calculate (edgedensity.c:192)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 ==14118==
 --14118-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV)
 - exiting
 --14118-- si_code=1;  Faulting address: 0x86291FA8;  sp: 0x40327be10

 valgrind: the 'impossible' happened:
    Killed by fatal signal
 ==14118==    at 0x380362F9: vgPlain_arena_malloc (m_mallocfree.c:245)

 sched status:
   running_tid=1

 Thread 1: status = VgTs_Runnable
 ==14118==    at 0x4C244E8: malloc (vg_replace_malloc.c:236)
 ==14118==    by 0x4E3D59E: G__malloc (alloc.c:37)
 ==14118==    by 0x54B9641: avl_make (avl.c:43)
 ==14118==    by 0x401BD6: calculate (edgedensity.c:279)
 ==14118==    by 0x4014C3: edgedensity (edgedensity.c:95)
 ==14118==    by 0x54B8E40: worker (worker.c:192)
 ==14118==    by 0x54B5BEA: calculateIndex (daemon.c:102)
 ==14118==    by 0x4013F9: main (edgedensity.c:70)
 }}}

 ...

 r.li.daemon/ipc.c:
 {{{
 int send(int pipe, msg *m)
 {
     int check;

     /* write on pipe */
     check = write(pipe, m, sizeof(msg));

     if (check > 0)
         return 1;
     else
         return 0;
 }
 }}}


 Hamish

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2024#comment:27>
GRASS GIS <http://grass.osgeo.org>



More information about the grass-dev mailing list