MCPcopy Create free account
hub / github.com/Achain-Dev/Achain / release_objects_in_pool

Method release_objects_in_pool

src/Chain/libraries/glua/thinkyoung_lua_api.cpp:421–459  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

419 }
420
421 void GluaChainApi::release_objects_in_pool(lua_State *L)
422 {
423 auto node = thinkyoung::lua::lib::get_lua_state_value_node(L, GLUA_OUTSIDE_OBJECT_POOLS_KEY);
424 // Map<type, Map<object_key, object_addr>>
425 std::map<GluaOutsideObjectTypes, std::shared_ptr<std::map<intptr_t, intptr_t>>> *object_pools = nullptr;
426 if (node.type == GluaStateValueType::LUA_STATE_VALUE_nullptr)
427 {
428 return;
429 }
430 object_pools = (std::map<GluaOutsideObjectTypes, std::shared_ptr<std::map<intptr_t, intptr_t>>> *) node.value.pointer_value;
431 // TODO: 对于object_pools中不同类型的对象,分别释放
432 for (const auto &p : *object_pools)
433 {
434 auto type = p.first;
435 auto pool = p.second;
436 for (const auto &object_item : *pool)
437 {
438 auto object_key = object_item.first;
439 auto object_addr = object_item.second;
440 if (object_addr == 0)
441 continue;
442 switch (type)
443 {
444 case GluaOutsideObjectTypes::OUTSIDE_STREAM_STORAGE_TYPE:
445 {
446 auto stream = (thinkyoung::lua::lib::GluaByteStream*) object_addr;
447 delete stream;
448 } break;
449 default: {
450 continue;
451 }
452 }
453 }
454 }
455 delete object_pools;
456 GluaStateValue null_state_value;
457 null_state_value.int_value = 0;
458 thinkyoung::lua::lib::set_lua_state_value(L, GLUA_OUTSIDE_OBJECT_POOLS_KEY, null_state_value, GluaStateValueType::LUA_STATE_VALUE_nullptr);
459 }
460
461 lua_Integer GluaChainApi::transfer_from_contract_to_address(lua_State *L, const char *contract_address, const char *to_address,
462 const char *asset_type, int64_t amount)

Callers 1

close_lua_stateFunction · 0.45

Calls 2

get_lua_state_value_nodeFunction · 0.85
set_lua_state_valueFunction · 0.85

Tested by

no test coverage detected