Skip to content

Commit 2271ffa

Browse files
committed
correct lock, semaphore, and thread accounting
1 parent bcf254a commit 2271ffa

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

src/routes.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2890,7 +2890,7 @@ static wolfsentry_errcode_t wolfsentry_route_event_dispatch_by_id_1(
28902890

28912891
if (event_label) {
28922892
if ((ret = wolfsentry_event_get_reference(WOLFSENTRY_CONTEXT_ARGS_OUT, event_label, event_label_len, &trigger_event)) < 0)
2893-
WOLFSENTRY_ERROR_RERETURN(ret);
2893+
WOLFSENTRY_ERROR_UNLOCK_AND_RERETURN(ret);
28942894
}
28952895

28962896
if ((ret = wolfsentry_table_ent_get_by_id(WOLFSENTRY_CONTEXT_ARGS_OUT, id, (struct wolfsentry_table_ent_header **)&route)) < 0)
@@ -2958,7 +2958,7 @@ static wolfsentry_errcode_t wolfsentry_route_event_dispatch_by_route_1(
29582958

29592959
if (event_label) {
29602960
if ((ret = wolfsentry_event_get_reference(WOLFSENTRY_CONTEXT_ARGS_OUT, event_label, event_label_len, &trigger_event)) < 0)
2961-
WOLFSENTRY_ERROR_RERETURN(ret);
2961+
WOLFSENTRY_ERROR_UNLOCK_AND_RERETURN(ret);
29622962
}
29632963

29642964
if (route->header.parent_table->ent_type != WOLFSENTRY_OBJECT_TYPE_ROUTE) {
@@ -3545,9 +3545,9 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_route_table_get_default_event(
35453545
char *event_label,
35463546
int *event_label_len)
35473547
{
3548-
if (table->default_event == NULL)
3549-
WOLFSENTRY_ERROR_RETURN(ITEM_NOT_FOUND);
35503548
WOLFSENTRY_SHARED_OR_RETURN();
3549+
if (table->default_event == NULL)
3550+
WOLFSENTRY_ERROR_UNLOCK_AND_RETURN(ITEM_NOT_FOUND);
35513551
if (table->default_event->label_len >= *event_label_len)
35523552
WOLFSENTRY_ERROR_UNLOCK_AND_RETURN(BUFFER_TOO_SMALL);
35533553
memcpy(event_label, table->default_event->label, (size_t)(table->default_event->label_len + 1));
@@ -3776,7 +3776,7 @@ WOLFSENTRY_API int wolfsentry_inet6_ntoa(const byte *addr, unsigned int addr_bit
37763776
int i;
37773777
const char *start_buf = buf;
37783778
int this_zerospan_length = 0;
3779-
int this_zerospan_offset;
3779+
int this_zerospan_offset = 0;
37803780
int longest_zerospan_length = 0;
37813781
int longest_zerospan_offset = 0;
37823782

src/wolfsentry_util.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)