@@ -599,12 +599,7 @@ impl RMain {
599
599
loop {
600
600
// Release the R runtime lock while we're waiting for input.
601
601
self . runtime_lock_guard = None ;
602
-
603
- // Run pending task, one at a time
604
- if !self . tasks_rx . is_empty ( ) {
605
- let mut task = self . tasks_rx . recv ( ) . unwrap ( ) ;
606
- task. fulfill ( ) ;
607
- }
602
+ self . run_one_task ( ) ;
608
603
609
604
// FIXME: Race between interrupt and new code request. To fix
610
605
// this, we could manage the Shell and Control sockets on the
@@ -883,6 +878,8 @@ impl RMain {
883
878
/// Invoked by the R event loop
884
879
fn polled_events ( & mut self ) {
885
880
// Check for pending tasks.
881
+ self . run_one_task ( ) ;
882
+
886
883
let count = R_RUNTIME_LOCK_COUNT . load ( std:: sync:: atomic:: Ordering :: Acquire ) ;
887
884
if count == 0 {
888
885
return ;
@@ -936,6 +933,14 @@ impl RMain {
936
933
graphics_device:: on_process_events ( ) ;
937
934
}
938
935
936
+ fn run_one_task ( & mut self ) {
937
+ // Run pending task, one at a time
938
+ if !self . tasks_rx . is_empty ( ) {
939
+ let mut task = self . tasks_rx . recv ( ) . unwrap ( ) ;
940
+ task. fulfill ( ) ;
941
+ }
942
+ }
943
+
939
944
fn send_dap ( & self , event : DapBackendEvent ) {
940
945
let dap = self . dap . lock ( ) . unwrap ( ) ;
941
946
if let Some ( tx) = & dap. backend_events_tx {
0 commit comments