[GRASS-dev] catch 2nd question (was gis.m crashes on zoom-out)

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


There is a lot of open/close syntax in georect.tcl *without* catch
statements for error trapping.

Generally, I've added these only where there is a likelihood of a problem.
Is it a good idea to add catch to *all* open and close statements? to *all*
close statements, regardless of whether the open statement has a catch? only
to ones likely to cause a crash?

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