Opened 6 years ago

Closed 6 years ago

#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 6 years ago.

Download all attachments as: .zip

Change History (4)

by wenzeslaus, 6 years ago

Attachment: unlock_current_mapset.diff added

comment:1 by wenzeslaus, 6 years ago

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 by wenzeslaus, 6 years ago

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

comment:3 by wenzeslaus, 6 years ago

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.