The UNIX locking facilities provide deadlock detection/avoidance. Deadlocks can happen only when the system is about to put a record locking function to sleep. A search is made to determine whether process A will wait for a lock that B holds while B is waiting for a lock that A holds. If a potential deadlock is detected, the locking function fails and sets errno to indicate deadlock. Processes setting locks using F_SETLK do not cause a deadlock because they do not wait when the lock cannot be granted immediately.