- 论坛徽章:
- 1
|
这是内核3.6.2里面的一个函数。这里面一下搞三个锁,是为什么?我觉得2个就可以搞定啊。if 里面的不可以合成一个吗?各种锁谁有示例代码啊?感觉内核里面各种锁用的很混乱啊,可能是我不太明白{:3_190:} 。什么锁该怎么用,怎么混用完全不明白啊。求教,谢了先。
static int adb_release(struct inode *inode, struct file *file)
{
struct adbdev_state *state = file->private_data;
unsigned long flags;
mutex_lock(&adb_mutex);
if (state) {
file->private_data = NULL;
spin_lock_irqsave(&state->lock, flags);
if (atomic_read(&state->n_pending) == 0
&& state->completed == NULL) {
spin_unlock_irqrestore(&state->lock, flags);
kfree(state);
} else {
state->inuse = 0;
spin_unlock_irqrestore(&state->lock, flags);
}
}
mutex_unlock(&adb_mutex);
return 0;
}
|
|