# Buggy code
def _handle_event(self, event: Event) -> CommandGenerator[None]:
    if isinstance(event, ResponseHeaders):
        headers = [
            (b":status", b"%d" % event.response.status_code),
            *event.response.headers.fields,
        ]
        if not event.response.is_http2:
            headers = normalize_h1_headers(headers, False)

        self.h2_conn.send_headers(
            event.stream_id,
            headers,
        )
        yield SendData(self.conn, self.h2_conn.data_to_send())
    else:
        yield from super()._handle_event(event)


# Traceback (AttributeError)
127.0.0.1:49187: mitmproxy has crashed!
Traceback (most recent call last):
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/server.py", line 276, in server_event
for command in layer_commands:
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 114, in handle_event
yield from self.__process(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 142, in __process
command = next(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 186, in handle_event
yield from self._handle(event)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 114, in handle_event
yield from self.__process(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 142, in __process
command = next(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/__init__.py", line 570, in _handle_event
yield from self.event_to_child(stream, event)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/__init__.py", line 586, in event_to_child
for command in child.handle_event(event):
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 114, in handle_event
yield from self.__process(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 142, in __process
command = next(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/__init__.py", line 488, in passthrough
for command in self.child_layer.handle_event(event):
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 114, in handle_event
yield from self.__process(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 142, in __process
command = next(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/tunnel.py", line 85, in _handle_event
yield from self.event_to_child(event)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/tunnel.py", line 104, in event_to_child
for command in self.child_layer.handle_event(event):
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 114, in handle_event
yield from self.__process(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 142, in __process
command = next(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/tunnel.py", line 85, in _handle_event
yield from self.event_to_child(event)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/tunnel.py", line 104, in event_to_child
for command in self.child_layer.handle_event(event):
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 114, in handle_event
yield from self.__process(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 142, in __process
command = next(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/__init__.py", line 570, in _handle_event
yield from self.event_to_child(stream, event)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/__init__.py", line 601, in event_to_child
yield from self.event_to_child(conn, command.event)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/__init__.py", line 586, in event_to_child
for command in child.handle_event(event):
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 114, in handle_event
yield from self.__process(command_generator)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layer.py", line 123, in __process
command = command_generator.send(send)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/_http2.py", line 266, in _handle_event
yield from super()._handle_event(event)
File "/mnt/c/Users/user/git/mitmproxy/mitmproxy/proxy/layers/http/_http2.py", line 91, in _handle_event
if stream.state_machine.state is not h2.stream.StreamState.CLOSED:
AttributeError: 'NoneType' object has no attribute 'state_machine'

# Fixed code
def _handle_event(self, event: Event) -> CommandGenerator[None]:
    if isinstance(event, ResponseHeaders):
        if self.is_open_for_us(event.stream_id):
            headers = [
                (b":status", b"%d" % event.response.status_code),
                *event.response.headers.fields,
            ]
            if not event.response.is_http2:
                headers = normalize_h1_headers(headers, False)

            self.h2_conn.send_headers(
                event.stream_id,
                headers,
            )
            yield SendData(self.conn, self.h2_conn.data_to_send())
    else:
        yield from super()._handle_event(event)