# Buggy code
def __init__(self, config, flow, event_queue, should_exit):
    """
    event_queue can be a queue or None, if no scripthooks should be
    processed.
    """
    self.config, self.flow = config, flow
    if event_queue:
        self.channel = controller.Channel(event_queue, should_exit)
    else:
        self.channel = None
    super(RequestReplayThread, self).__init__("RequestReplay (%s)" % flow.request.url)


# Traceback (AttributeError)
user@user-ubuntu:~$ mitmproxy
Exception ignored in: <bound method Reply.__del__ of <mitmproxy.controller.Reply object at 0x7f69de8646a0>>
Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 269, in __del__
raise exceptions.ControlException("Un-acked message: %s" % self.obj)
mitmproxy.exceptions.ControlException: Un-acked message: <HTTPFlow
request = Request(GET www.example.com:80/)
server_conn = <ServerConnection: www.example.com:80>>
Exception ignored in: <bound method Reply.__del__ of <mitmproxy.controller.Reply object at 0x7f69de864da0>>
Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 269, in __del__
raise exceptions.ControlException("Un-acked message: %s" % self.obj)
mitmproxy.exceptions.ControlException: Un-acked message: <HTTPFlow
request = Request(GET www.example.com:80/)
response = Response(200 OK, text/html, 1.24k)
server_conn = <ServerConnection: www.example.com:80>>
rTraceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/console/master.py", line 502, in run
self.loop.run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 278, in run
self._run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 376, in _run
self.event_loop.run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 682, in run
self._loop()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 715, in _loop
alarm_callback()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 164, in cb
callback(self, user_data)
File "/media/sf_git/mitmproxy/mitmproxy/console/master.py", line 448, in ticker
changed = self.tick(timeout=0)
File "/media/sf_git/mitmproxy/mitmproxy/flow/master.py", line 140, in tick
return super(FlowMaster, self).tick(timeout)
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 136, in tick
handle_func(obj)
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 219, in wrapper
master.addons(f.__name__, message)
File "/media/sf_git/mitmproxy/mitmproxy/addons.py", line 64, in __call__
self.invoke(i, name, *args, **kwargs)
File "/media/sf_git/mitmproxy/mitmproxy/addons.py", line 60, in invoke
func(*args, **kwargs)
File "/media/sf_git/mitmproxy/mitmproxy/builtins/setheaders.py", line 39, in response
self.run(flow, flow.response.headers)
AttributeError: 'NoneType' object has no attribute 'headers'

mitmproxy has crashed!
Please lodge a bug report at:
https://github.com/mitmproxy/mitmproxy
Shutting down...
rrrrrrrrrrException ignored in: <bound method Reply.__del__ of <mitmproxy.controller.Reply object at 0x7f69df0c2c18>>
Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 269, in __del__
mitmproxy.exceptions.ControlException: Un-acked message: <HTTPFlow
request = Request(GET www.example.com:80/)
response = Response(200 OK, text/html, 1.24k)
error = Connection killed
server_conn = <ServerConnection: www.example.com:80>>
user@user-ubuntu:~$ mitmproxy
rException ignored in: <bound method Reply.__del__ of <mitmproxy.controller.Reply object at 0x7f17c5270ac8>>
Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 269, in __del__
raise exceptions.ControlException("Un-acked message: %s" % self.obj)
mitmproxy.exceptions.ControlException: Un-acked message: <HTTPFlow
request = Request(GET www.example.com:80/)
response = Response(200 OK, text/html, 1.24k)
server_conn = <ServerConnection: www.example.com:80>>
rException ignored in: <bound method Reply.__del__ of <mitmproxy.controller.Reply object at 0x7f17c5291908>>
Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 269, in __del__
raise exceptions.ControlException("Un-acked message: %s" % self.obj)
mitmproxy.exceptions.ControlException: Un-acked message: <HTTPFlow
request = Request(GET www.example.com:80/)
response = Response(200 OK, text/html, 1.24k)
server_conn = <ServerConnection: www.example.com:80>>
Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/console/master.py", line 502, in run
self.loop.run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 278, in run
self._run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 376, in _run
self.event_loop.run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 682, in run
self._loop()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 715, in _loop
alarm_callback()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 164, in cb
callback(self, user_data)
File "/media/sf_git/mitmproxy/mitmproxy/console/master.py", line 448, in ticker
changed = self.tick(timeout=0)
File "/media/sf_git/mitmproxy/mitmproxy/flow/master.py", line 140, in tick
return super(FlowMaster, self).tick(timeout)
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 136, in tick
handle_func(obj)
File "/media/sf_git/mitmproxy/mitmproxy/controller.py", line 219, in wrapper
master.addons(f.__name__, message)
File "/media/sf_git/mitmproxy/mitmproxy/addons.py", line 64, in __call__
self.invoke(i, name, *args, **kwargs)
File "/media/sf_git/mitmproxy/mitmproxy/addons.py", line 60, in invoke
func(*args, **kwargs)
File "/media/sf_git/mitmproxy/mitmproxy/builtins/setheaders.py", line 39, in response
self.run(flow, flow.response.headers)
AttributeError: 'NoneType' object has no attribute 'headers'

mitmproxy has crashed!
Please lodge a bug report at:
https://github.com/mitmproxy/mitmproxy
Shutting down...

# Fixed code
def __init__(self, config, flow, event_queue, should_exit):
    """
    event_queue can be a queue or None, if no scripthooks should be
    processed.
    """
    self.config, self.flow = config, flow
    flow.live = True
    if event_queue:
        self.channel = controller.Channel(event_queue, should_exit)
    else:
        self.channel = None
    super(RequestReplayThread, self).__init__("RequestReplay (%s)" % flow.request.url)