Ejemplo n.º 1
0
 // DbgManager thread
 void UpdateRuntime_DbgThread(DbgRuntimeImpl?runtime)
 {
     owner.Dispatcher.VerifyAccess();
     lock (lockObj) {
         var newCurrent = GetRuntime_NoLock(currentRuntime.Current, runtime);
         var newBreak   = GetRuntime_NoLock(currentRuntime.Break, runtime);
         currentRuntime = new CurrentObject <DbgRuntimeImpl>(newCurrent, newBreak);
     }
 }
Ejemplo n.º 2
0
 DbgRuntimeImpl?GetRuntime_NoLock(DbgRuntimeImpl?runtime, DbgRuntimeImpl?defaultRuntime)
 {
     if (!(runtime is null))
     {
         var info = engineInfos.First(a => a.Runtime == runtime);
         if (info.IsPaused || owner.GetDelayedIsRunning_DbgThread(info.Engine) == false)
         {
             return(runtime);
         }
     }
     return(defaultRuntime ?? engineInfos.FirstOrDefault(a => a.IsPaused)?.Runtime);
 }
Ejemplo n.º 3
0
 // DbgManager thread
 internal void SetRunning_DbgThread(DbgRuntimeImpl?runtime)
 {
     owner.Dispatcher.VerifyAccess();
     if (runtime is null)
     {
         return;
     }
     lock (lockObj) {
         var info = engineInfos.First(a => a.Runtime == runtime);
         info.IsPaused = false;
         UpdateRuntime_DbgThread(null);
     }
 }
Ejemplo n.º 4
0
        internal (DbgRuntimeImpl?runtime, bool hasMoreRuntimes) Remove_DbgThread(DbgEngine engine)
        {
            DbgRuntimeImpl?runtime = null;
            bool           hasMoreRuntimes;

            lock (lockObj) {
                for (int i = 0; i < engineInfos.Count; i++)
                {
                    var info = engineInfos[i];
                    if (info.Engine == engine)
                    {
                        UpdateRuntime_DbgThread(null);
                        runtime = info.Runtime;
                        engineInfos.RemoveAt(i);
                        break;
                    }
                }
                hasMoreRuntimes = engineInfos.Count > 0;
            }
            return(runtime, hasMoreRuntimes);
        }