Fix WSL patch (it doesn't fall under "win32") (#9195)

This commit is contained in:
mehrdadn
2020-06-29 19:00:00 -07:00
committed by GitHub
parent 79c4c67ed9
commit 882f60012f
2 changed files with 36 additions and 29 deletions
+30 -28
View File
@@ -26,34 +26,36 @@ def patch_redis_empty_recv():
def patch_psutil():
if (platform.system() == "Linux"
and "Microsoft".lower() in platform.release().lower()):
# WSL's /proc/meminfo has an inconsistency where it
# nondeterministically omits a space after colons (after "SwapFree:"
# in my case).
# psutil then splits on spaces and then parses the wrong field,
# crashing on the 'int(fields[1])' expression in
# psutil._pslinux.virtual_memory().
# Workaround: We ensure there is a space following each colon.
"""WSL's /proc/meminfo has an inconsistency where it
nondeterministically omits a space after colons (after "SwapFree:"
in my case).
psutil then splits on spaces and then parses the wrong field,
crashing on the 'int(fields[1])' expression in
psutil._pslinux.virtual_memory().
Workaround: We ensure there is a space following each colon.
"""
assert (platform.system() == "Linux"
and "Microsoft".lower() in platform.release().lower())
try:
import psutil._pslinux
except ImportError:
psutil = None
psutil_open_binary = None
if psutil:
try:
import psutil._pslinux
except ImportError:
psutil = None
psutil_open_binary = None
if psutil:
try:
psutil_open_binary = psutil._pslinux.open_binary
except AttributeError:
pass
# Only patch it if it doesn't seem to have been patched already
if psutil_open_binary and psutil_open_binary.__name__ == "open_binary":
psutil_open_binary = psutil._pslinux.open_binary
except AttributeError:
pass
# Only patch it if it doesn't seem to have been patched already
if psutil_open_binary and psutil_open_binary.__name__ == "open_binary":
def psutil_open_binary_patched(fname, *args, **kwargs):
f = psutil_open_binary(fname, *args, **kwargs)
if fname == "/proc/meminfo":
with f:
# Make sure there's a space after colons
return io.BytesIO(f.read().replace(b":", b": "))
return f
def psutil_open_binary_patched(fname, *args, **kwargs):
f = psutil_open_binary(fname, *args, **kwargs)
if fname == "/proc/meminfo":
with f:
# Make sure there's a space after colons
return io.BytesIO(f.read().replace(b":", b": "))
return f
psutil._pslinux.open_binary = psutil_open_binary_patched
psutil._pslinux.open_binary = psutil_open_binary_patched