Fixes for PyPy compatibility (#9270)

* synapse.app.base: only call gc.freeze() on CPython

gc.freeze() is an implementation detail of CPython garbage collector,
and notably does not exist on PyPy.

Rather than playing whack-a-mole and skipping the call when under PyPy,
simply restrict it to CPython because the whole gc module is
implementation-defined.

Signed-off-by: Ivan Shapovalov <intelfx@intelfx.name>
pull/9283/head
Ivan Shapovalov 2021-01-30 20:22:05 +03:00 committed by GitHub
parent f2c1560eca
commit 13c7ab8181
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 1 deletions

1
changelog.d/9270.misc Normal file
View File

@ -0,0 +1 @@
Restore PyPy compatibility by not calling CPython-specific GC methods when under PyPy.

View File

@ -16,6 +16,7 @@
import gc
import logging
import os
import platform
import signal
import socket
import sys
@ -339,7 +340,7 @@ async def start(hs: "synapse.server.HomeServer", listeners: Iterable[ListenerCon
# rest of time. Doing so means less work each GC (hopefully).
#
# This only works on Python 3.7
if sys.version_info >= (3, 7):
if platform.python_implementation() == "CPython" and sys.version_info >= (3, 7):
gc.collect()
gc.freeze()