[GRASS-dev] gis.m crashes on zoom-out

Michael Barton michael.barton at asu.edu
Sun Apr 29 12:03:12 EDT 2007


I'm going to try to add the needed catch statements discussed below, but
have a question. In the the mapcanvas.tcl example given below, there is an
"exit 1". I don't think I'm the one who added this. When I've done catch
statements, I've had a way to trap and print the error, but haven't found it
necessary to shut down the script. Any reason why I *shouldn't* take this
out and *not* put "exit 1" lines in similar catch clauses for close
statements?

Michael


On 4/24/07 3:09 AM, "Hamish" <hamish_nospam at yahoo.com> wrote:

>>>> Hamish wrote:
>>>>> found a bug in gis.m zoom out tool.
>>>>> 
>>>>> start gis.m, select zoom out, draw a box, and poof! gis.m
>>>>> crashes.
>>>>> 
>>>>> happens always in a lat long location when you zoom out past
>>>>> 90NS 180EW view or a bit harder to trigger in spearfish, but
>>>>> crashes on the 4th or 5th zoom out when the rows*cols gets to be
>>>>> something silly like 500e6*500e6.
>>>>> 
>>>>> presumably g.region exits with an error which isn't handled
>>>>> well.
>>> 
>>> Glynn Clements wrote:
>>>> Yep.
>>>> 
>>>> If you spawn a child process with "open |...", any errors are
>>>> reported by way of the corresponding "close" throwing an
>>>> exception. Tcl's definition of "error" includes anything being
>>>> written to stderr (so any warnings are treated as errors), as well
>>>> as a non-zero exit code.
>>>> 
>>>> Any calls to "close" on a subprocess pipe should be enclosed in a
>>>> catch statement.
>>>> 
> Hamish:
>>> gui/tcltk/gis.m$ grep close * | grep -v catch
>>> 
>>> 
>>> finds this one in georect.tcl
>>>   proc GRMap::zoom_gregion { args} {
>>> 
>>> and in histogram.tcl:
>>>   proc GmHist::display { node mod } {
>>> 
>>> and in rastnums.tcl:
>>>   proc GmRnums::display { node mod } {
>>> 
>>> and in runandoutput.tcl:
>>>   proc guarantee_xmon {} {
>>> 
>>> 
>>> ..maybe more?
>>> 
>>> I don't see the open|g.region in mapcanvas.tcl which triggers this
>>> bug?
>>> 
> Glynn:
>> Line 585, in Mapcanvas::runprograms:
>> 
>> if {[catch {close $input} error]} {
>> puts $error
>> exit 1
>> }
>> 
>> It catches the error, then prints the error message and exits. Not
>> really much point in catching it.
> 
> 
> So what would the soltution look like? Would the above catch+puts+exit
> in the histogram or georect tool only bring down those tools and not all
> of gis.m as they do now?
> 
> histogram.tcl and rastnums.tcl probably need a catch on the open as well?
> 
> 
> tcl is mostly beyond me, so I can't really do much to fix these...
> 
> 
> 
> Hamish
> 
> 

__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton





More information about the grass-dev mailing list