Skip to content

Commit ea6416e

Browse files
committed
Fixes according to review comments
1 parent 84813da commit ea6416e

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

Lib/multiprocessing/resource_tracker.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ def _make_probe_message(self):
198198
"""Return a JSON-encoded probe message."""
199199
return (
200200
json.dumps(
201-
{"cmd": "PROBE", "rtype": "noop", "base64_name": ""},
201+
{"cmd": "PROBE", "rtype": "noop"},
202202
ensure_ascii=True,
203203
separators=(",", ":"),
204204
)
@@ -262,6 +262,8 @@ def _write(self, msg):
262262
assert nbytes == len(msg), f"{nbytes=} != {len(msg)=}"
263263

264264
def _send(self, cmd, name, rtype):
265+
# POSIX guarantees that writes to a pipe of less than PIPE_BUF (512 on Linux)
266+
# bytes are atomic. Therefore, we want the message to be shorter than 512 bytes.
265267
# POSIX shm_open() and sem_open() require the name, including its leading slash,
266268
# to be at most NAME_MAX bytes (255 on Linux)
267269
# With json.dump(..., ensure_ascii=True) every non-ASCII byte becomes a 6-char
@@ -309,25 +311,22 @@ def main(fd):
309311
try:
310312
# keep track of registered/unregistered resources
311313
with open(fd, 'rb') as f:
312-
for raw in f:
314+
for line in f:
313315
try:
314-
line = raw.rstrip(b'\n')
315316
try:
316317
obj = json.loads(line.decode('ascii'))
317318
except Exception as e:
318319
raise ValueError("malformed resource_tracker message: %r" % (line,)) from e
319320

320-
cmd = obj.get("cmd")
321-
rtype = obj.get("rtype")
322-
b64 = obj.get("base64_name")
321+
cmd = obj["cmd"]
322+
rtype = obj["rtype"]
323+
b64 = obj.get("base64_name", "")
323324

324325
if not isinstance(cmd, str) or not isinstance(rtype, str) or not isinstance(b64, str):
325326
raise ValueError("malformed resource_tracker fields: %r" % (obj,))
326327

327-
enc = b64.encode('ascii')
328-
enc += b'=' * (-len(enc) % 4) # normalize padding
329328
try:
330-
name = base64.urlsafe_b64decode(enc).decode('utf-8', 'surrogateescape')
329+
name = base64.urlsafe_b64decode(b64).decode('utf-8', 'surrogateescape')
331330
except ValueError as e:
332331
raise ValueError("malformed resource_tracker base64_name: %r" % (b64,)) from e
333332

0 commit comments

Comments
 (0)