Opened 13 years ago

Closed 6 years ago

Last modified 6 years ago

#1286 closed defect (fixed)

clean_temp can not be called before LOCATION_NAME is set

Reported by: marisn Owned by: grass-dev@…
Priority: major Milestone: 6.4.6
Component: Startup Version: 6.4.1 RCs
Keywords: wingrass clean_temp init Cc:
CPU: Unspecified Platform: MSWindows Vista

Description

clean_temp uses G_gisinit(argv[0]) and thus should never be run outside of GRASS session, still it is used in init.bat before location name is set on windows and is failing with error: "G_getenv(): Variable LOCATION_NAME not set" Calling G_getenv on non-existing variable is an fatal error and thus brings down whole startup procedure.

There are two possible solutions for this problem:

  • do not use clean_temp in init.bat
  • do not use G_gisinit() in clean_temp

Change History (13)

in reply to:  description comment:1 by glynn, 13 years ago

Replying to marisn:

There are two possible solutions for this problem:

  • do not use clean_temp in init.bat
  • do not use G_gisinit() in clean_temp

There is only one possible solution: the first one. The purpose of clean_temp is to clean up the mapset's temp directory (<database>/<location>/<mapset>/.tmp/<hostname>). If you don't have a database/location/mapset set, clean_temp can't work.

in reply to:  description comment:2 by martinl, 13 years ago

Keywords: wingrass added

Replying to marisn:

clean_temp uses G_gisinit(argv[0]) and thus should never be run outside of GRASS session, still it is used in init.bat before location name is set on windows and is failing with error: "G_getenv(): Variable LOCATION_NAME not set" Calling G_getenv on non-existing variable is an fatal error and thus brings down whole startup procedure.

There are two possible solutions for this problem:

  • do not use clean_temp in init.bat
  • do not use G_gisinit() in clean_temp

Probably I overlooked something, clean_temp is called in init.bat on three different places. When I disable redirecting to nuldev and run GRASS with init.bat I am getting no error messages and clean_tmp seems to work well.

comment:3 by marisn, 13 years ago

All three places of clean_tmp can be reached without LOCATION_NAME being set. http://trac.osgeo.org/grass/browser/grass/branches/releasebranch_6_4/lib/init/init.ba

in reply to:  3 ; comment:4 by martinl, 13 years ago

Replying to marisn:

All three places of clean_tmp can be reached without LOCATION_NAME being set. http://trac.osgeo.org/grass/browser/grass/branches/releasebranch_6_4/lib/init/init.ba

On which conditions? Seems to work here without any problem.

in reply to:  4 ; comment:5 by martinl, 13 years ago

Replying to martinl:

Replying to marisn:

All three places of clean_tmp can be reached without LOCATION_NAME being set. http://trac.osgeo.org/grass/browser/grass/branches/releasebranch_6_4/lib/init/init.ba

On which conditions? Seems to work here without any problem.

Please provide more precise information, it's marked as a "blocker"...

in reply to:  5 comment:6 by martinl, 13 years ago

Priority: blockercritical

All three places of clean_tmp can be reached without LOCATION_NAME being set. http://trac.osgeo.org/grass/browser/grass/branches/releasebranch_6_4/lib/init/init.ba

On which conditions? Seems to work here without any problem.

Please provide more precise information, it's marked as a "blocker"...

downgrading priority at this point

in reply to:  4 comment:7 by hamish, 13 years ago

Replying to martinl:

Replying to marisn:

All three places of clean_tmp can be reached without LOCATION_NAME being set. http://trac.osgeo.org/grass/browser/grass/branches/releasebranch_6_4/lib/init/init.ba

On which conditions? Seems to work here without any problem.

try removing the %HOME%/.grassrc6 file or installing on a fresh system/VM.

And/or cancel after initial startup with a new .grassrc6 file containing location (etc) set to <UNKNOWN>, then restart.

Or delete/rename the GISDBASE, LOCATION, or MAPSET dir which happens to be the last one used.

The .bat file just checks that the rc file exists in %HOME%, not that it contains valid entries, and if it's the same as init.sh, the operational version used by G_*() isn't the one in $HOME anyway.

I'm not sure if init.sh is terribly better about it checking validity, but the question is if it creates a fatal script exit in the WinGrass startup, while a similar problem would just create a harmless error message to the console on UNIX. ??

Hamish

comment:8 by hamish, 13 years ago

Priority: criticalmajor
Summary: clean_temp can not be called before LCATION_NAME is setclean_temp can not be called before LOCATION_NAME is set

comment:9 by neteler, 12 years ago

Milestone: 6.4.16.4.4

comment:10 by neteler, 11 years ago

See also #560: WinGRASS not deleting temp ppm files from map display

comment:11 by neteler, 8 years ago

Milestone: 6.4.46.4.6

comment:12 by wenzeslaus, 6 years ago

Keywords: clean_temp init added
Resolution: fixed
Status: newclosed

In G7 this is solved since clean_temp (which is using G_gisinit()) is called only in grass.py and g.mapset. grass.py calls it only after proper setup and before teardown and g.mapset itself uses G_gisinit(). Closing as fixed.

grep --exclude-dir={.svn,OBJ.,dist.*,bin.*} -IrnE clean_temp

comment:13 by wenzeslaus, 6 years ago

In 73342:

init: clean mapset only after locking it (fixes #613, see #1286)

Only after we set the user-requested mapset as current (GISRC) and lock it,
we can do the startup cleaning using clean_temp (to clean after previous sessions
if needed).

The cleaning was in place at least since r11260 but it got moved to a wrong place some
time after that but before r37863.

Note: See TracTickets for help on using tickets.