# Buggy code
def __init__(self, packet_manager: packet.PacketManager) -> None:
    self.packet_manager = packet_manager
    # FIXME(tbrindus): marked as Any since PacketManager likes querying current_submission.id directly.
    self.current_submission: Any = None
    self.current_judge_worker: Optional[JudgeWorker] = None

    self.updater_exit = False
    self.updater_signal = threading.Event()
    self.updater = threading.Thread(target=self._updater_thread)


# Traceback (ConnectionResetError)
INFO 2020-07-04 08:30:53,248 54 judge Start grading atimesb/262720 in CPP11...
INFO 2020-07-04 08:30:53,261 54 packet Accept submission: 262720: executor: CPP11, code: atimesb
ERROR 2020-07-04 08:30:54,083 26503 judge Judge unexpectedly hung up!
Traceback (most recent call last):
File "/judge/dmoj/judge.py", line 350, in _ipc_recv_thread_main
ipc_type, data = judge_process_conn.recv()
File "/usr/lib/python3.8/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/usr/lib/python3.8/multiprocessing/connection.py", line 414, in _recv_bytes
buf = self._recv(4)
File "/usr/lib/python3.8/multiprocessing/connection.py", line 379, in _recv
chunk = read(handle, remaining)
ConnectionResetError: [Errno 104] Connection reset by peer
WARNING 2020-07-04 08:30:54,122 26503 tracer Skipping the killing of process because it already exited: 26515
ERROR 2020-07-04 08:30:54,122 54 judge Traceback (most recent call last):
File "/judge/dmoj/judge.py", line 151, in _grading_thread_main
handler_func(report, *data)
File "/judge/dmoj/judge.py", line 177, in _ipc_compile_message
self.packet_manager.compile_message_packet(compile_message)
File "/judge/dmoj/packet.py", line 324, in compile_message_packet
log.debug('Compile message: %d', self.judge.current_submission.id)
AttributeError: 'NoneType' object has no attribute 'id'
ERROR 2020-07-04 08:30:54,122 54 judge Error encountered while reporting error to site!
Traceback (most recent call last):
File "/judge/dmoj/judge.py", line 151, in _grading_thread_main
handler_func(report, *data)
File "/judge/dmoj/judge.py", line 177, in _ipc_compile_message
self.packet_manager.compile_message_packet(compile_message)
File "/judge/dmoj/packet.py", line 324, in compile_message_packet
log.debug('Compile message: %d', self.judge.current_submission.id)
AttributeError: 'NoneType' object has no attribute 'id'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/judge/dmoj/judge.py", line 267, in log_internal_error
self.packet_manager.internal_error_packet(strip_ansi(message))
File "/judge/dmoj/packet.py", line 330, in internal_error_packet
log.debug('Internal error: %d', self.judge.current_submission.id)
AttributeError: 'NoneType' object has no attribute 'id'
Process DMOJ Judge Handler for atimesb/262720:
Traceback (most recent call last):
File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
self.run()
File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/judge/dmoj/judge.py", line 371, in _worker_process_main
judge_process_conn.send(ipc_msg)
File "/usr/lib/python3.8/multiprocessing/connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "/usr/lib/python3.8/multiprocessing/connection.py", line 411, in _send_bytes
self._send(header + buf)
File "/usr/lib/python3.8/multiprocessing/connection.py", line 368, in _send
n = write(self._handle, buf)
BrokenPipeError: [Errno 32] Broken pipe

# Fixed code
def __init__(self, packet_manager: packet.PacketManager) -> None:
    self.packet_manager = packet_manager
    # FIXME(tbrindus): marked as Any since PacketManager likes querying current_submission.id directly.
    self.current_submission: Any = None
    self.current_judge_worker: Optional[JudgeWorker] = None
    self._grading_lock = threading.Lock()

    self.updater_exit = False
    self.updater_signal = threading.Event()
    self.updater = threading.Thread(target=self._updater_thread)