---
title: IORecursiveLockAlloc
framework: kernel
role: symbol
role_heading: Function
path: kernel/1553013-iorecursivelockalloc
---

# IORecursiveLockAlloc

Allocates and initializes an recursive lock.

## Declaration

```occ
struct IORecursiveLock * IORecursiveLockAlloc(void);
```

```occ
IORecursiveLock * IORecursiveLockAlloc(void);
```

## Return Value

Return Value Pointer to the allocated lock, or zero on failure.

## Discussion

Discussion Allocates a recursive lock in general purpose memory, and initializes it. Recursive locks function identically to mutexes but allow one thread to lock more than once, with balanced unlocks. IORecursiveLocks use the global IOKit lock group, IOLockGroup. To simplify kext debugging and lock-heat analysis, consider using lck_* locks with a per-driver lock group, as defined in kern/locks.h.

## See Also

### Recursive Locks

- [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)
- [IORecursiveLockUnlock](kernel/1553032-iorecursivelockunlock.md)
- [IORecursiveLockWakeup](kernel/1553014-iorecursivelockwakeup.md)
