posix: pthread: ensure pthread_key_delete() removes correct key
Previously, `pthread_key_delete()` was only ever deleting key 0 rather than the key corresponding to the provided argument. Signed-off-by: Christopher Friedt <cfriedt@meta.com>
This commit is contained in:
parent
e3f5c96667
commit
a89fa32dac
1 changed files with 6 additions and 1 deletions
|
|
@ -10,6 +10,7 @@
|
|||
#include <zephyr/posix/pthread.h>
|
||||
#include <zephyr/posix/pthread_key.h>
|
||||
#include <zephyr/sys/bitarray.h>
|
||||
#include <zephyr/sys/__assert.h>
|
||||
|
||||
struct pthread_key_data {
|
||||
sys_snode_t node;
|
||||
|
|
@ -120,6 +121,8 @@ int pthread_key_create(pthread_key_t *key,
|
|||
*/
|
||||
int pthread_key_delete(pthread_key_t key)
|
||||
{
|
||||
size_t bit;
|
||||
__unused int ret;
|
||||
pthread_key_obj *key_obj;
|
||||
struct pthread_key_data *key_data;
|
||||
sys_snode_t *node_l, *next_node_l;
|
||||
|
|
@ -145,7 +148,9 @@ int pthread_key_delete(pthread_key_t key)
|
|||
k_free((void *)key_data);
|
||||
}
|
||||
|
||||
(void)sys_bitarray_free(&posix_key_bitarray, 1, 0);
|
||||
bit = posix_key_to_offset(key_obj);
|
||||
ret = sys_bitarray_free(&posix_key_bitarray, 1, bit);
|
||||
__ASSERT_NO_MSG(ret == 0);
|
||||
|
||||
k_spin_unlock(&pthread_key_lock, key_key);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue