@@ -1613,7 +1613,7 @@ static const struct wolfsentry_semcbs builtin_sem_methods =
16131613
16141614#define sem_init (hpi->semcbs.sem_init ? hpi->semcbs.sem_init : builtin_sem_methods.sem_init)
16151615#define sem_post (hpi->semcbs.sem_post ? hpi->semcbs.sem_post : builtin_sem_methods.sem_post)
1616- #define sem_wait (hpi->emcbs-> sem_wait ? hpi->emcbs-> sem_wait : builtin_sem_methods.sem_wait)
1616+ #define sem_wait (hpi->semcbs. sem_wait ? hpi->semcbs. sem_wait : builtin_sem_methods.sem_wait)
16171617#define sem_timedwait (hpi->semcbs.sem_timedwait ? hpi->semcbs.sem_timedwait : builtin_sem_methods.sem_timedwait)
16181618#define sem_trywait (hpi->semcbs.sem_trywait ? hpi->semcbs.sem_trywait : builtin_sem_methods.sem_trywait)
16191619#define sem_destroy (hpi->semcbs.sem_destroy ? hpi->semcbs.sem_destroy : builtin_sem_methods.sem_destroy)
@@ -1622,7 +1622,7 @@ static const struct wolfsentry_semcbs builtin_sem_methods =
16221622
16231623#define sem_init (hpi->semcbs.sem_init)
16241624#define sem_post (hpi->semcbs.sem_post)
1625- #define sem_wait (hpi->emcbs-> sem_wait)
1625+ #define sem_wait (hpi->semcbs. sem_wait)
16261626#define sem_timedwait (hpi->semcbs.sem_timedwait)
16271627#define sem_trywait (hpi->semcbs.sem_trywait)
16281628#define sem_destroy (hpi->semcbs.sem_destroy)
@@ -1674,14 +1674,11 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_lock_init(struct wolfsentry_host_
16741674 goto out ;
16751675
16761676 free_write_waiters :
1677- if (sem_init (& lock -> sem_write_waiters , (flags & WOLFSENTRY_LOCK_FLAG_PSHARED ) != 0 , 0 /* value */ ) < 0 )
1678- WOLFSENTRY_ERROR_RETURN (SYS_RESOURCE_FAILED );
1677+ (void )sem_destroy (& lock -> sem_write_waiters );
16791678 free_read_waiters :
1680- if (sem_init (& lock -> sem_read_waiters , (flags & WOLFSENTRY_LOCK_FLAG_PSHARED ) != 0 , 0 /* value */ ) < 0 )
1681- WOLFSENTRY_ERROR_RETURN (SYS_RESOURCE_FAILED );
1679+ (void )sem_destroy (& lock -> sem_read_waiters );
16821680 free_sem :
1683- if (sem_init (& lock -> sem , (flags & WOLFSENTRY_LOCK_FLAG_PSHARED ) != 0 , 1 /* value */ ) < 0 )
1684- WOLFSENTRY_ERROR_RETURN (SYS_RESOURCE_FAILED );
1681+ (void )sem_destroy (& lock -> sem );
16851682
16861683 out :
16871684
@@ -1961,7 +1958,7 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_lock_shared_abstimed(struct wolfs
19611958 if (sem_trywait (& lock -> sem_read_waiters ) == 0 ) {
19621959 if (sem_post (& lock -> sem ) < 0 )
19631960 WOLFSENTRY_ERROR_RETURN (SYS_OP_FATAL );
1964- WOLFSENTRY_RETURN_OK ;
1961+ goto got_read ;
19651962 }
19661963
19671964 -- lock -> read_waiter_count ;
@@ -1972,6 +1969,8 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_lock_shared_abstimed(struct wolfs
19721969 WOLFSENTRY_ERROR_RERETURN (ret );
19731970 }
19741971
1972+ got_read :
1973+
19751974 ++ thread -> shared_count ;
19761975 if (! thread -> tracked_shared_lock ) {
19771976 thread -> tracked_shared_lock = lock ;
@@ -2276,6 +2275,7 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_lock_mutex_abstimed(struct wolfse
22762275 if (sem_trywait (& lock -> sem_write_waiters ) == 0 ) {
22772276 if (sem_post (& lock -> sem ) < 0 )
22782277 WOLFSENTRY_ERROR_RETURN (SYS_OP_FATAL );
2278+ WOLFSENTRY_ATOMIC_STORE (lock -> write_lock_holder , WOLFSENTRY_THREAD_GET_ID );
22792279 if (thread )
22802280 ++ thread -> mutex_and_reservation_count ;
22812281 WOLFSENTRY_RETURN_OK ;
0 commit comments