advlock: general fixes

This commit is contained in:
Matheus
2026-06-29 11:33:03 -03:00
parent eb798d24b4
commit 17334c8533
2 changed files with 9 additions and 3 deletions
+8 -2
View File
@@ -80,7 +80,10 @@ advlock_t *advlock_allocate(void) {
}
void advlock_free(advlock_t *advlock) {
advlock->type = ADVLOCK_UNLOCK;
advlock->shared_count = 0;
advlock->refcount = 1;
EVENT_INITHEADER(&advlock->unlock_event);
slab_free(advlock_cache, advlock);
}
@@ -270,8 +273,6 @@ static int adv_lock(vnode_t *vnode, int op, advlock_t *lock, bool non_blocking)
}
// can take the lock!
lock->type = op;
if (vnode->advlock == NULL) {
// unlocked advlock
if (op == ADVLOCK_SHARED) {
@@ -281,6 +282,9 @@ static int adv_lock(vnode_t *vnode, int op, advlock_t *lock, bool non_blocking)
error = ENOMEM;
goto leave;
}
vnode->advlock->type = ADVLOCK_SHARED;
vnode->advlock->shared_count = 1;
} else {
// exclusive lock
vnode->advlock = lock;
@@ -291,6 +295,8 @@ static int adv_lock(vnode_t *vnode, int op, advlock_t *lock, bool non_blocking)
++vnode->advlock->shared_count;
}
lock->type = op;
leave:
MUTEX_RELEASE(&vnode->adv_mutex);
return error;
+1 -1
View File
@@ -7,7 +7,7 @@ syscallret_t syscall_flock(context_t *, int fd, int op_flag) {
.ret = -1
};
int op = op_flag &= ~ADVLOCK_NON_BLOCKING;
int op = op_flag & ~ADVLOCK_NON_BLOCKING;
switch (op) {
case ADVLOCK_UNLOCK:
case ADVLOCK_SHARED: