================ @@ -799,7 +799,33 @@ DNBProcessAttachWait(RNBContext *ctx, const char *waitfor_process_name, break; } - ::usleep(waitfor_interval); // Sleep for WAITFOR_INTERVAL, then poll again + // Now we're going to wait a while before polling again. But we also + // need to check whether we've gotten an event from the debugger + // telling us to interrupt the wait. So we'll use the wait for a possible + // next event to also be our short pause... + struct timespec short_timeout; + DNBTimer::OffsetTimeOfDay(&short_timeout, 0, waitfor_interval); + uint32_t event_mask = RNBContext::event_read_packet_available + | RNBContext::event_read_thread_exiting; + nub_event_t set_events = ctx->Events().WaitForSetEvents(event_mask, + &short_timeout); + if (set_events & RNBContext::event_read_packet_available) { + // If we get any packet from the debugger while waiting on the async, + // it has to be telling us to interrupt. So always exit here. + // Over here in DNB land we can see that there was a packet, but all + // the methods to actually handle it are protected. It's not worth + // rearranging all that just to get which packet we were sent... + DNBLogError("Interrupted by packet while waiting for '%s' to appear.\n", ---------------- JDevlieghere wrote:
Can we check the packet and assert/log when it's not an interrupt? I know that's technically not allowed by the GDB remote protocol, but that would make it easy to catch such a mistake. https://github.com/llvm/llvm-project/pull/72565 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits