---
title: IORecursiveLockLock
framework: kernel
role: symbol
role_heading: Function
path: kernel/1553020-iorecursivelocklock
---

# IORecursiveLockLock

Lock a recursive lock.

## Declaration

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

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

## Parameters

- `lock`: Pointer to the allocated lock.

## Discussion

Discussion Lock the recursive lock. If the lock is held by another thread, block waiting for its unlock. This function may block and so should not be called from interrupt level or while a spin lock is held. The lock may be taken recursively by the same thread, with a balanced number of calls to IORecursiveLockUnlock.

## See Also

### Recursive Locks

- [IORecursiveLockAlloc](kernel/1553013-iorecursivelockalloc.md)
- [IORecursiveLockFree](kernel/1553031-iorecursivelockfree.md)
- [IORecursiveLockGetMachLock](kernel/1552988-iorecursivelockgetmachlock.md)
- [IORecursiveLockHaveLock](kernel/1552995-iorecursivelockhavelock.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)
