Skip to content

Commit

Permalink
tests/optional_mutex: check counter within a lock
Browse files Browse the repository at this point in the history
The variables "value" and "counter" are modified within mutex locks, so
it makes sense for the final check to also be within a mutex lock.

However, the final check happens after pthread_join(), so there isn't
any danger of synchronization problems.

Reported by:	Coverity scan
  • Loading branch information
gperciva committed Jan 14, 2024
1 parent bfffdd7 commit b3d47f0
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions tests/optional_mutex/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,32 @@ test_pthread(void)
}
#endif

static int
check_counter(int counter_expected)
{
int rc = 0;

/* Lock if we're using pthread. */
if ((rc = optional_mutex_lock(&mutex)) != 0) {
warn0("optional_mutex_lock: %s", strerror(rc));
goto err0;
}

/* Check the value and counter. */
if ((value != 0) || (counter != counter_expected))
rc = -1;

/* Unlock if we're using pthread. */
if ((rc = optional_mutex_unlock(&mutex)) != 0) {
warn0("optional_mutex_unlock: %s", strerror(rc));
goto err0;
}

err0:
/* Success or failure! */
return (rc);
}

int
main(int argc, char * argv[])
{
Expand All @@ -112,8 +138,8 @@ main(int argc, char * argv[])
inc_dec_counter(NULL);
#endif

/* Check the counter. */
if ((value != 0) || (counter != counter_expected))
/* Check that the counter has the expected value. */
if (check_counter(counter_expected))
goto err0;

/* Success! */
Expand Down

0 comments on commit b3d47f0

Please sign in to comment.