Ejemplo n.º 1
0
 /// <summary>
 /// Creates a new thread
 /// </summary>
 public Thread()
 {
     TID     = NextTID++;
     Context = new X86ThreadContext();
     m_currentSignalContext = null;
     m_signalMutex          = new Mutex();
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Processes a signal
        /// </summary>
        /// <param name="action">The action</param>
        /// <returns>The signal context</returns>
        public void ProcessSignal(SignalAction action)
        {
            while (m_currentSignalContext != null)
            {
                Tasking.Yield();
            }

            m_signalMutex.Lock();
            m_currentSignalContext = Context.ProcessSignal(action);
            m_signalMutex.Unlock();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Returns from a signal (restores original context)
        /// </summary>
        public unsafe void ReturnFromSignal()
        {
            m_signalMutex.Lock();

            if (m_currentSignalContext == null)
            {
                m_signalMutex.Unlock();
                return;
            }

            Context.ReturnFromSignal(m_currentSignalContext);

            m_currentSignalContext.Dispose();
            Heap.Free(m_currentSignalContext);
            m_currentSignalContext = null;

            m_signalMutex.Unlock();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Returns from signal (restores original context)
        /// </summary>
        /// <param name="oldContext">Old context</param>
        public void ReturnFromSignal(ISignalContext oldContext)
        {
            X86SignalContext old = (X86SignalContext)oldContext;

            Memory.Memcpy(m_sysRegs, old.Sysregs, sizeof(RegsDirect));
        }