---
title: IORecursiveLockUnlock
framework: kernel
role: symbol
role_heading: Function
path: kernel/1553032-iorecursivelockunlock
---

# IORecursiveLockUnlock

Unlock a recursive lock.

## Declaration

```occ
void IORecursiveLockUnlock(struct IORecursiveLock *lock);
```

```occ
void IORecursiveLockUnlock(IORecursiveLock *lock);
```

## Parameters

- `lock`: Pointer to the allocated lock.

## Discussion

Discussion Undo one call to IORecursiveLockLock, if the lock is now unlocked wake any blocked waiters. Results are undefined if the caller does not balance calls to IORecursiveLockLock with IORecursiveLockUnlock. This function may block and so should not be called from interrupt level or while a spin lock is held.

## See Also

### Recursive Locks

- [IORecursiveLockAlloc](kernel/1553013-iorecursivelockalloc.md)
- [IORecursiveLockFree](kernel/1553031-iorecursivelockfree.md)
- [IORecursiveLockGetMachLock](kernel/1552988-iorecursivelockgetmachlock.md)
- [IORecursiveLockHaveLock](kernel/1552995-iorecursivelockhavelock.md)
- [IORecursiveLockLock](kernel/1553020-iorecursivelocklock.md)
- [IORecursiveLockSleep](kernel/1553001-iorecursivelocksleep.md)
- [IORecursiveLockSleepDeadline](kernel/1552986-iorecursivelocksleepdeadline.md)
- [IORecursiveLockTryLock](kernel/1552993-iorecursivelocktrylock.md)
- [IORecursiveLockWakeup](kernel/1553014-iorecursivelockwakeup.md)
