1
0

qmemman: make memory request handling more defensive

If getting memory for new VM fails for any reason, make sure that global
lock will be released. Otherwise qmemman will stop functioning at all.

QubesOS/qubes-issues#1636
Dieser Commit ist enthalten in:
Marek Marczykowski-Górecki 2016-02-22 17:56:43 +01:00
Ursprung 5546d679c0
Commit 0121cb2fd4
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 063938BA42CFA724

Datei anzeigen

@ -175,6 +175,7 @@ class QMemmanReqHandler(SocketServer.BaseRequestHandler):
self.log = logging.getLogger('qmemman.daemon.reqhandler')
got_lock = False
try:
# self.request is the TCP socket connected to the client
while True:
self.data = self.request.recv(1024).strip()
@ -184,8 +185,6 @@ class QMemmanReqHandler(SocketServer.BaseRequestHandler):
if got_lock:
global force_refresh_domain_list
force_refresh_domain_list = True
global_lock.release()
self.log.debug('global_lock released')
return
# XXX something is wrong here: return without release?
@ -204,8 +203,13 @@ class QMemmanReqHandler(SocketServer.BaseRequestHandler):
resp = "FAIL\n"
self.log.debug('resp={!r}'.format(resp))
self.request.send(resp)
# XXX no release of lock?
except BaseException as e:
self.log.exception(
"exception while handling request: {!r}".format(e))
finally:
if got_lock:
global_lock.release()
self.log.debug('global_lock released')
def start_server(server):