1 /*
2 * Copyright (c) 2006-2023, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2023-11-01 Shell Init ver.
9 */
10
11 #include "lwp_futex_internal.h"
12
13 static struct shared_futex_entry *_futex_hash_head;
14
futex_global_table_add(struct shared_futex_key * key,rt_futex_t futex)15 rt_err_t futex_global_table_add(struct shared_futex_key *key, rt_futex_t futex)
16 {
17 rt_err_t rc = 0;
18 struct shared_futex_entry *entry = &futex->entry;
19 futex->entry.key.mobj = key->mobj;
20 futex->entry.key.offset = key->offset;
21
22 RT_UTHASH_ADD(_futex_hash_head, key, sizeof(struct shared_futex_key), entry);
23 return rc;
24 }
25
futex_global_table_find(struct shared_futex_key * key,rt_futex_t * futex)26 rt_err_t futex_global_table_find(struct shared_futex_key *key, rt_futex_t *futex)
27 {
28 rt_err_t rc;
29 rt_futex_t found_futex;
30 struct shared_futex_entry *entry;
31
32 RT_UTHASH_FIND(_futex_hash_head, key, sizeof(struct shared_futex_key), entry);
33 if (entry)
34 {
35 rc = RT_EOK;
36 found_futex = rt_container_of(entry, struct rt_futex, entry);
37 }
38 else
39 {
40 rc = -RT_ENOENT;
41 found_futex = RT_NULL;
42 }
43
44 *futex = found_futex;
45 return rc;
46 }
47
futex_global_table_delete(struct shared_futex_key * key)48 rt_err_t futex_global_table_delete(struct shared_futex_key *key)
49 {
50 rt_err_t rc;
51 struct shared_futex_entry *entry;
52
53 RT_UTHASH_FIND(_futex_hash_head, key, sizeof(struct shared_futex_key), entry);
54 if (entry)
55 {
56 RT_UTHASH_DELETE(_futex_hash_head, entry);
57 rc = RT_EOK;
58 }
59 else
60 {
61 rc = -RT_ENOENT;
62 }
63
64 return rc;
65 }
66