Skip to content

Commit

Permalink
sync: fix FreeBSD implementation of sync functions (#20483)
Browse files Browse the repository at this point in the history
  • Loading branch information
kimshrier committed Jan 11, 2024
1 parent 9109b23 commit 341e79f
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 14 deletions.
6 changes: 3 additions & 3 deletions vlib/sync/mutex_test.v
Expand Up @@ -35,8 +35,8 @@ fn test_try_lock_mutex() {
try_fail := mx.try_lock()
assert try_fail == false
mx.unlock()
try_sucess := mx.try_lock()
assert try_sucess == true
mx.unlock() // you must unlock it, after try_lock sucess
try_success := mx.try_lock()
assert try_success == true
mx.unlock() // you must unlock it, after try_lock success
mx.destroy()
}
18 changes: 9 additions & 9 deletions vlib/sync/rwmutex_test.v
Expand Up @@ -51,12 +51,12 @@ fn test_try_lock_rwmutex() {

mx.unlock()

// try_rlock will always sucess when mx unlocked,
// try_rlock will always succeed when mx unlocked,
// multiple try_rlock can apply to the same mx
try_sucess_reading2 := mx.try_rlock()
try_sucess_reading3 := mx.try_rlock()
assert try_sucess_reading2 == true
assert try_sucess_reading3 == true
try_success_reading2 := mx.try_rlock()
try_success_reading3 := mx.try_rlock()
assert try_success_reading2 == true
assert try_success_reading3 == true

// if mx is rlocked, then the try_wlock will fail
try_fail_writing2 := mx.try_wlock()
Expand All @@ -65,10 +65,10 @@ fn test_try_lock_rwmutex() {
mx.runlock()
mx.runlock() // you must release rlock mutiple times, as it was rlocked multiple times

// after mx release all rlock, try_wlock will sucess
try_sucess_writing3 := mx.try_wlock()
assert try_sucess_writing3 == true
// after mx release all rlock, try_wlock will succeed
try_success_writing3 := mx.try_wlock()
assert try_success_writing3 == true

mx.unlock() // you must unlock it, after try_wlock sucess
mx.unlock() // you must unlock it, after try_wlock success
mx.destroy()
}
7 changes: 5 additions & 2 deletions vlib/sync/sync_freebsd.c.v
Expand Up @@ -41,22 +41,25 @@ pub struct C.pthread_mutex {}

pub struct C.pthread_rwlock {}

pub struct C.pthread_rwlockattr {}
@[typedef]
pub struct C.pthread_rwlockattr_t {}

@[typedef]
pub struct C.sem_t {}

// [init_with=new_mutex] // TODO: implement support for this struct attribute, and disallow Mutex{} from outside the sync.new_mutex() function.
@[heap]
pub struct Mutex {
mutex &C.pthread_mutex = unsafe { nil }
}

@[heap]
pub struct RwMutex {
mutex &C.pthread_rwlock = unsafe { nil }
}

struct RwMutexAttr {
attr &C.pthread_rwlockattr = unsafe { nil }
attr C.pthread_rwlockattr_t
}

@[heap]
Expand Down

0 comments on commit 341e79f

Please sign in to comment.