#2151: g.gui.* modules which use temporal framework leave processes after 
exiting
--------------------------------------------+-------------------------------
 Reporter:  annakrat                        |       Owner:  grass-dev@…         
     
     Type:  defect                          |      Status:  new                 
     
 Priority:  normal                          |   Milestone:  7.0.0               
     
Component:  Python                          |     Version:  svn-trunk           
     
 Keywords:  g.gui.animation, temporal, RCP  |    Platform:  Linux               
     
      Cpu:  All                             |  
--------------------------------------------+-------------------------------

Comment(by huhabla):

 It seems to me that the g.gui.timeline child process is still alive after
 the fork. The init process is the new parent of the forked child??

 I have patched g.gui.timeline a make it a bit faster and to assure at
 least the termination of the messenger and C-interface subprocesses of the
 temporal framework:

 {{{
 #!diff
 Index: timeline/frame.py
 ===================================================================
 --- timeline/frame.py   (Revision 58582)
 +++ timeline/frame.py   (Arbeitskopie)
 @@ -78,7 +78,18 @@
          self._layout()
          self.temporalType = None
          self.unit = None
 +        # We create a database interface here to speedup the GUI
 +        self.dbif = tgis.SQLDatabaseInterfaceConnection()
 +        self.dbif.connect()

 +    def __del__(self):
 +        """!Close the database interface and stop the messenger and
 C-interface
 +           subprocesses.
 +        """
 +        if self.dbif.connected is True:
 +            self.dbif.close()
 +        tgis.stop_subprocesses()
 +
      def _layout(self):
          """!Creates the main panel with all the controls on it:
               * mpl canvas
 @@ -145,15 +156,16 @@
          self.timeData = {}
          mode = None
          unit = None
 +
          for series in timeseries:
              name = series[0] + '@' + series[1]
              etype = series[2]
              sp = tgis.dataset_factory(etype, name)
 -            if not sp.is_in_db():
 +            if not sp.is_in_db(dbif=self.dbif):
                  GError(self, message=_("Dataset <%s> not found in
 temporal database") % (name))
                  return

 -            sp.select()
 +            sp.select(dbif=self.dbif)

              self.timeData[name] = {}
              self.timeData[name]['elementType'] = series[2]
 @@ -167,8 +179,8 @@
                  return

              # check topology
 -            maps = sp.get_registered_maps_as_objects()
 -            self.timeData[name]['validTopology'] =
 sp.check_temporal_topology(maps)
 +            maps = sp.get_registered_maps_as_objects(dbif=self.dbif)
 +            self.timeData[name]['validTopology'] =
 sp.check_temporal_topology(maps=maps, dbif=self.dbif)

              self.timeData[name]['temporalMapType'] = sp.get_map_time()  #
 point/interval
              self.timeData[name]['unit'] = None  # only with relative
 @@ -194,7 +206,7 @@
                                  'north', 'south', 'west', 'east'])

              rows = sp.get_registered_maps(columns=columns, where=None,
 -                                          order='start_time', dbif=None)
 +                                          order='start_time',
 dbif=self.dbif)
              if rows is None:
                  rows = []
              for row in rows:
 @@ -385,7 +397,7 @@
          @return (mapName, mapset, type)
          """
          validated = []
 -        tDict = tgis.tlist_grouped('stds', group_type=True)
 +        tDict = tgis.tlist_grouped('stds', group_type=True,
 dbif=self.dbif)
          # nested list with '(map, mapset, etype)' items
          allDatasets = [[[(map, mapset, etype) for map in maps]
                       for etype, maps in etypesDict.iteritems()]
 }}}

 The patch is not applied yet, since it does not solve the issue that the
 child process is still alive. Maybe an explicit os.exit() should be added
 to g.gui.timeline? How about an exit button?

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2151#comment:8>
GRASS GIS <http://grass.osgeo.org>

_______________________________________________
grass-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to