#3631 closed defect (fixed)

Mapset remains locked after switch to it and exit

Reported by: wenzeslaus Owned by: grass-dev@…
Priority: normal Milestone: 7.6.0
Component: Startup Version: svn-trunk
Keywords: init, grass.py, lock, gislock, g.mapset Cc:
CPU: Unspecified Platform: Linux

Description

To reproduce:

  1. Start in mapset A.
  2. Switch to mapset B.
  3. Exit.
  4. Mapset B is still locked.

The problem is that grass.py tries to remove the lock from A, but that was already removed. No warning or error is generated, because grass.py tries (try_remove()) and thus ignores any errors. This behavior seems to be there at least since 7.0 (by looking at the code).

Influences:

  • G7:g.mapset
  • Settings > GRASS working environment > ...
  • workspace loading with "session" (#3575)

Attachments (1)

unlock_current_mapset.diff (1.9 KB) - added by wenzeslaus 14 months ago.

Download all attachments as: .zip

Change History (4)

Changed 14 months ago by wenzeslaus

Attachment: unlock_current_mapset.diff added

comment:1 Changed 14 months ago by wenzeslaus

The attached patch basically replaced removal of acquired lock stored in a variable

if self.lockfile:
    try_remove(self.lockfile)

by removal based on the gisrc file.

def unlock_gisrc_mapset(gisrc, gisrcrc):
    settings = load_gisrc(gisrc, gisrcrc)
    lockfile = os.path.join(settings.full_mapset, ".gislock")
    try_remove(lockfile)
...
atexit.register(lambda: unlock_gisrc_mapset(gisrc, gisrcrc))

comment:2 Changed 14 months ago by wenzeslaus

See also #3635 for similar issue related to mapset tmp dir.

comment:3 Changed 13 months ago by wenzeslaus

Resolution: fixed
Status: assignedclosed

In 73335:

init: remove lock from the current mapset (fixes #3631)

Do not remove lock based on the path to the initially locked file,
but instead use the rc file point to by GISRC (assumed stable within this proccess)
to find out the current mapset and remove lock file there.

Now a sequence start in mapset A, switch to B, exit removes all lock files.
Before, only the A lock file was removed, specifically the lock file was left
in the mapset exited from.

Note: See TracTickets for help on using tickets.