Ok, I may see what is happening. Even with my changes, in ~cac the msgForMultiplyDefinedPV are removed from the msgMultiPVList list before their destructor is called (where dnsTransaction.release() happens). So pvMultiplyDefinedNotify() may already be queued and run after removal from the list, but before release(). This will blindly try to remove() again, which causes the crash.
I think the fix will be to track whether an msgForMultiplyDefinedPV is in the list.
Ok, I may see what is happening. Even with my changes, in ~cac the msgForMultiplyD efinedPV are removed from the msgMultiPVList list before their destructor is called (where dnsTransaction. release( ) happens). So pvMultiplyDefin edNotify( ) may already be queued and run after removal from the list, but before release(). This will blindly try to remove() again, which causes the crash.
I think the fix will be to track whether an msgForMultiplyD efinedPV is in the list.