void MethodTransform::sync() { while (try_sync() == false) ; { std::lock_guard<std::mutex> g(s_lock); s_cache.erase(m_method); } delete this; }
std::unique_ptr<DexCode> IRCode::sync(const DexMethod* method) { auto dex_code = std::make_unique<DexCode>(); try { calculate_ins_size(method, &*dex_code); dex_code->set_registers_size(m_registers_size); dex_code->set_outs_size(calc_outs_size(this)); dex_code->set_debug_item(std::move(m_dbg)); while (try_sync(dex_code.get()) == false) ; } catch (std::exception&) { fprintf(stderr, "Failed to sync %s\n%s\n", SHOW(method), SHOW(this)); throw; } return dex_code; }