Skip to content

Commit 152a27b

Browse files
author
Hritik Gupta
committed
fix: addressed review comment
1 parent f9ed30d commit 152a27b

File tree

1 file changed

+23
-28
lines changed

1 file changed

+23
-28
lines changed

core/iwasm/common/wasm_shared_memory.c

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ static bh_list shared_memory_list_head;
1010
static bh_list *const shared_memory_list = &shared_memory_list_head;
1111
static korp_mutex shared_memory_list_lock;
1212

13-
static bh_list atomic_wait_address_list_head;
14-
static bh_list *const atomic_wait_address_list = &atomic_wait_address_list_head;
15-
static korp_mutex atomic_wait_address_list_lock;
16-
1713
/* clang-format off */
1814
enum {
1915
S_WAITING,
@@ -56,8 +52,6 @@ wasm_shared_memory_init()
5652
{
5753
if (os_mutex_init(&shared_memory_list_lock) != 0)
5854
return false;
59-
if (os_mutex_init(&atomic_wait_address_list_lock) != 0)
60-
return false;
6155
/* wait map not exists, create new map */
6256
if (!(wait_map = bh_hash_map_create(32, true, (HashFunc)wait_address_hash,
6357
(KeyEqualFunc)wait_address_equal, NULL,
@@ -73,7 +67,6 @@ void
7367
wasm_shared_memory_destroy()
7468
{
7569
os_mutex_destroy(&shared_memory_list_lock);
76-
os_mutex_destroy(&atomic_wait_address_list_lock);
7770
if (wait_map) {
7871
bh_hash_map_destroy(wait_map);
7972
}
@@ -99,12 +92,35 @@ search_module(WASMModuleCommon *module)
9992
return NULL;
10093
}
10194

95+
static void
96+
create_list_of_waiter_addresses(void *key, void *value, void *user_data)
97+
{
98+
/* add waiter address to atomic wait list */
99+
AtomicWaitAddressNode *wait_address_node;
100+
101+
if (!(wait_address_node =
102+
wasm_runtime_malloc(sizeof(AtomicWaitAddressNode)))) {
103+
return;
104+
}
105+
wait_address_node->addr = key;
106+
bh_assert(bh_list_insert(user_data, wait_address_node) == BH_LIST_SUCCESS);
107+
}
108+
102109
void
103110
notify_stale_threads_on_exception(WASMModuleInstanceCommon *module_inst)
104111
{
112+
bh_list atomic_wait_address_list_head;
113+
bh_list *const atomic_wait_address_list = &atomic_wait_address_list_head;
114+
static korp_mutex atomic_wait_address_list_lock;
105115
AtomicWaitAddressNode *node;
106116

117+
bh_list_status ret = bh_list_init(atomic_wait_address_list);
118+
bh_assert(ret == BH_LIST_SUCCESS);
119+
107120
os_mutex_lock(&atomic_wait_address_list_lock);
121+
bh_hash_map_traverse(wait_map, create_list_of_waiter_addresses,
122+
atomic_wait_address_list);
123+
108124
node = bh_list_first_elem(atomic_wait_address_list);
109125
while (node) {
110126
wasm_runtime_atomic_notify(module_inst, node->addr, UINT32_MAX);
@@ -330,11 +346,6 @@ release_wait_info(HashMap *wait_map_, AtomicWaitInfo *wait_info, void *address)
330346

331347
if (wait_info->wait_list->len == 0) {
332348
bh_hash_map_remove(wait_map_, address, NULL, NULL);
333-
334-
os_mutex_lock(&atomic_wait_address_list_lock);
335-
bh_list_remove(atomic_wait_address_list, address);
336-
os_mutex_unlock(&atomic_wait_address_list_lock);
337-
338349
destroy_wait_info(wait_info);
339350
}
340351

@@ -376,22 +387,6 @@ wasm_runtime_atomic_wait(WASMModuleInstanceCommon *module, void *address,
376387

377388
os_mutex_lock(&wait_info->wait_list_lock);
378389

379-
/* add waiter address to atomic wait list */
380-
AtomicWaitAddressNode *wait_address_node;
381-
382-
os_mutex_lock(&atomic_wait_address_list_lock);
383-
if (!(wait_address_node =
384-
wasm_runtime_malloc(sizeof(AtomicWaitAddressNode)))) {
385-
wasm_runtime_set_exception(module,
386-
"failed to create wait address node");
387-
os_mutex_unlock(&atomic_wait_address_list_lock);
388-
return -1;
389-
}
390-
wait_address_node->addr = address;
391-
bh_assert(bh_list_insert(atomic_wait_address_list, wait_address_node)
392-
== BH_LIST_SUCCESS);
393-
os_mutex_unlock(&atomic_wait_address_list_lock);
394-
395390
if ((!wait64 && *(uint32 *)address != (uint32)expect)
396391
|| (wait64 && *(uint64 *)address != expect)) {
397392
os_mutex_unlock(&wait_info->wait_list_lock);

0 commit comments

Comments
 (0)