VirtualBox

Changeset 61186 in vbox for trunk/src/VBox/Main/webservice


Ignore:
Timestamp:
May 25, 2016 7:52:06 AM (9 years ago)
Author:
vboxsync
Message:

Main/webservice/python: Release the webservice server side object when the local stub is destroyed (fixes increasing memory usage with vboxwebsrv and VBoxSVC)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/webservice/websrv-python.xsl

    r59798 r61186  
    175175       self.handle = handle
    176176       self.isarray = isarray
    177 <!--
    178     This doesn't work now
    179        mgr.register(handle)
     177       if self.isarray:
     178           for strHnd in handle:
     179               mgr.register(strHnd)
     180       else:
     181           mgr.register(self.handle)
    180182
    181183   def __del__(self):
    182        mgr.unregister(self.handle)
    183 -->
     184       self.releaseRemote()
     185
    184186   def releaseRemote(self):
    185187        try:
    186             req=IManagedObjectRef_releaseRequestMsg()
    187             req._this=handle
    188             self.mgr.getPort().IManagedObjectRef_release(req)
     188            if self.handle is not None:
     189               if self.isarray:
     190                   for strHnd in self.handle:
     191                       self.mgr.unregister(strHnd)
     192               else:
     193                   self.mgr.unregister(self.handle)
     194               self.handle = None;
    189195        except:
    190196            pass
     
    211217
    212218   def __str__(self):
    213         return self.handle
     219        if self.isarray:
     220            return str(self.handle)
     221        else:
     222            return self.handle
    214223
    215224   def isValid(self):
     
    495504from VirtualBox_client import *
    496505
    497 class ManagedManager:
    498   def __init__(self):
     506class ObjectRefManager:
     507  def __init__(self, sessionmgr):
    499508     self.map = {}
    500 
    501   def register(self,handle):
     509     self.sessionmgr = sessionmgr
     510
     511  def register(self, handle):
    502512     if handle == None:
    503513        return
     
    506516     self.map[handle]=c
    507517
    508   def unregister(self,handle):
     518  def unregister(self, handle):
    509519     if handle == None:
    510520        return
     
    517527            req=IManagedObjectRef_releaseRequestMsg()
    518528            req._this=handle
    519             self.mgr.getPort().IManagedObjectRef_release(req)
     529            self.sessionmgr.getPort().IManagedObjectRef_release(req)
    520530        except:
    521531            pass
    522         self.map[handle] = -1
     532        del self.map[handle]
    523533     else:
    524534        self.map[handle] = c
     
    873883import base64
    874884
    875 class IWebsessionManager2(IWebsessionManager):
     885class IWebsessionManager2(IWebsessionManager, ObjectRefManager):
    876886  def __init__(self, url):
    877887       self.url = url
     
    879889       self.handle = None
    880890       self.mgr = self
     891       ObjectRefManager.__init__(self, self.mgr)
    881892
    882893  def getPort(self):
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette