Example #1
0
void MethodTransform::sync() {
  while (try_sync() == false)
    ;
  {
    std::lock_guard<std::mutex> g(s_lock);
    s_cache.erase(m_method);
  }
  delete this;
}
Example #2
0
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;
}