Skip to content
Snippets Groups Projects
Commit 7401d092 authored by Václav Bartoš's avatar Václav Bartoš
Browse files

Client: Fixed memory leak in Error object

parent 2d92abeb
No related branches found
No related tags found
No related merge requests found
...@@ -120,6 +120,14 @@ class Error(Exception): ...@@ -120,6 +120,14 @@ class Error(Exception):
kwargs["send_events_limit"] = int(kwargs["send_events_limit"]) kwargs["send_events_limit"] = int(kwargs["send_events_limit"])
except Exception: except Exception:
del kwargs["send_events_limit"] del kwargs["send_events_limit"]
if "exc" in kwargs:
# Traceback objects cause reference loops, so memory may be not
# correctly free'd. We only need traceback to log it in str_debug(),
# so let's get the string representation now and forget the
# traceback object, thus preventing the loop.
exctype, excvalue, tb = kwargs["exc"]
tb = format_tb(tb)
kwargs["exc"] = exctype, excvalue, tb
self.errors.append(kwargs) self.errors.append(kwargs)
...@@ -211,10 +219,10 @@ class Error(Exception): ...@@ -211,10 +219,10 @@ class Error(Exception):
out.append(self.str_preamble(e)) out.append(self.str_preamble(e))
if not "exc" in e or not e["exc"]: if not "exc" in e or not e["exc"]:
return "" return ""
exc_tb = e["exc"][2] exc_tb = e["exc"][2] # exc_tb is string repr. of traceback object
if exc_tb: if exc_tb:
out.append("Traceback:\n") out.append("Traceback:\n")
out.extend(format_tb(exc_tb)) out.extend(exc_tb)
return "".join(out) return "".join(out)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment