1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /*
- * Copyright (c) 2006-2023, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2023-11-01 Shell Init ver.
- */
- #include "lwp_futex_internal.h"
- static struct shared_futex_entry *_futex_hash_head;
- rt_err_t futex_global_table_add(struct shared_futex_key *key, rt_futex_t futex)
- {
- rt_err_t rc = 0;
- struct shared_futex_entry *entry = &futex->entry;
- futex->entry.key.mobj = key->mobj;
- futex->entry.key.offset = key->offset;
- RT_UTHASH_ADD(_futex_hash_head, key, sizeof(struct shared_futex_key), entry);
- return rc;
- }
- rt_err_t futex_global_table_find(struct shared_futex_key *key, rt_futex_t *futex)
- {
- rt_err_t rc;
- rt_futex_t found_futex;
- struct shared_futex_entry *entry;
- RT_UTHASH_FIND(_futex_hash_head, key, sizeof(struct shared_futex_key), entry);
- if (entry)
- {
- rc = RT_EOK;
- found_futex = rt_container_of(entry, struct rt_futex, entry);
- }
- else
- {
- rc = -RT_ENOENT;
- found_futex = RT_NULL;
- }
- *futex = found_futex;
- return rc;
- }
- rt_err_t futex_global_table_delete(struct shared_futex_key *key)
- {
- rt_err_t rc;
- struct shared_futex_entry *entry;
- RT_UTHASH_FIND(_futex_hash_head, key, sizeof(struct shared_futex_key), entry);
- if (entry)
- {
- RT_UTHASH_DELETE(_futex_hash_head, entry);
- rc = RT_EOK;
- }
- else
- {
- rc = -RT_ENOENT;
- }
- return rc;
- }
|