========================== MegDNNDtorCheck ========================== */
| 672 | |
| 673 | /* ========================== MegDNNDtorCheck ========================== */ |
| 674 | void ComputingGraphImpl::MegDNNDtorCheck::enable() { |
| 675 | mgb_assert(!m_enabled); |
| 676 | m_enabled = true; |
| 677 | auto cb_dnn = [](megdnn::OperatorBase* opr) { |
| 678 | mgb_log_error("unexpected destruction of dnn opr %p", opr); |
| 679 | mgb_trap(); |
| 680 | }; |
| 681 | auto cb_mem = [](size_t alloc_size, bool, void* ptr) { |
| 682 | if (!alloc_size) { |
| 683 | mgb_log_error("unexpected mem release %p", ptr); |
| 684 | mgb_trap(); |
| 685 | } |
| 686 | }; |
| 687 | m_orig_dnn_cb = cb_dnn; |
| 688 | m_orig_mem_cb = cb_mem; |
| 689 | m_handle->set_opr_destruct_callback(m_orig_dnn_cb); |
| 690 | m_env->mem_event_handler(m_orig_mem_cb); |
| 691 | mgb_assert(!m_orig_dnn_cb && !m_orig_mem_cb); |
| 692 | } |
| 693 | |
| 694 | ComputingGraphImpl::MegDNNDtorCheck::~MegDNNDtorCheck() { |
| 695 | if (m_enabled) { |