[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