@@ -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