Unlockupd - Works around a bug in lookupd
Version: 1.0b1Unlockupd works around a bug in lookupd, a system service which is required for proper operation of Mac OS X. If lookupd fails, the system quickly becomes unusable. Unlockupd periodically checks lookupd's status and forces it to restart should it fail.
Operating System: Mac OS X
WARNING: Although Unlockupd has undergone a significant amount of testing with no reported problems, this software should still be considered beta-quality. It is only being made available now since the cat snuck out of the bag on the darwin-dev mailing list.
Technical Details - Lookupd is the lookup and caching daemon responsible for handling NetInfo, DNS, and other such requests. Applications typically do not access lookupd directly, but rather, use standardized library functions (such as gethostbyname for DNS) which access lookupd on the application's behalf.
Lookupd has a bug (rdar://3632865) in its cache cleanup code that causes it to randomly crash. CrashReporter, the system crash log agent, does not properly handle lookupd crashes and as a result, when lookupd crashes, the process is not terminated. Since lookupd has not terminated, mach_init does not respawn lookupd. From this point, any application that attempts to access lookupd either directly or indirectly, will hang.
Once lookupd stops responding it becomes difficult but not impossible to recover the system to a usable state. One technique which works but is not recommended (for obvious reasons), is to leave a root shell running and `killall -9 lookupd` when it becomes obvious that lookupd has died (sudo does not work, since it requires lookupd's services, as does opening a new terminal window).
How unlockupd works - Unlockupd is a small daemon which periodically polls lookupd. If it detects that lookupd is not responding, it makes a note in the system log and forces lookupd to terminate.