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

Glynn Clements glynn at gclements.plus.com
Thu Apr 5 12:34:08 EDT 2007


Hamish 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.
> 
> 
> 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?

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.

-- 
Glynn Clements <glynn at gclements.plus.com>




More information about the grass-dev mailing list