Hello yet again, I'm hitting the following issue when trying to re-set a translator on a node whose translator has previously died:
$ settrans -acP /tmp/yes ~/dev-yes/hurd/yes Translator pid: 1039 Pausing... $ kill 1039 $ settrans -ag /tmp/yes ~/dev-yes/hurd/yes settrans: /tmp/yes: (os/kern) invalid right I've traced it to fshelp_fetch_control () returning KERN_INVALID_RIGHT when the control right of the previously set translator turns out to be a dead name. fshelp_fetch_control () actually handles this case with a specific code path which resets the stored port to MACH_PORT_NULL, but it returns an error nevertheless. Digging up git history, the two relevant commits are [0] and [1]. Commit [0] introduces this special handling for dead names, and actually tries to deallocate the dead name and return 0 + MACH_PORT_NULL from the fshelp_fetch_control () call. Commit [1] reverts a part of this logic: fshelp_fetch_control () no longer tries to deallocate the dead name (so the task keeps it forever?..), and no longer returns 0 to the caller, propagating KERN_INVALID_RIGHT instead. Which is the source of the error I'm seeing. Indeed, reverting [1] seems to fix my issue. I don't think I understand the reasoning behind [1]. Perhaps I'm missing something? Sergey [0]: http://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=3319f7f6a238cf88b9f46849e7be84d3c96376d6 [1]: http://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=7b9011628ec0dea3e01b19b75013ce5cf5b9c841