help-smalltalk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-smalltalk] JIT user interrupts and updating the context


From: Holger Hans Peter Freyther
Subject: Re: [Help-smalltalk] JIT user interrupts and updating the context
Date: Fri, 7 Feb 2014 21:41:27 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Feb 07, 2014 at 09:01:45PM +0100, Holger Hans Peter Freyther wrote:

> As usual I don't understand the issue yet. The interrupt should be
> queued through a normal SET_EXCEPT_FLAG and all frame information
> should be written back. Do you have an idea or time to look into for
> a fix?

I think we should first update thisContext, nativeIP and more and then
check for _gst_abort_execution. This is the order used by interp-bc.inl.

I think it will be very difficult to create a unit test for this one.

diff --git a/libgst/interp-jit.inl b/libgst/interp-jit.inl
index 78fa94c..b74f3ef 100644
--- a/libgst/interp-jit.inl
+++ b/libgst/interp-jit.inl
@@ -407,14 +407,6 @@ _gst_interpret (OOP processOOP)
 
        SET_EXCEPT_FLAG (false);
 
-        if UNCOMMON (_gst_abort_execution)
-         {
-           OOP selectorOOP;
-           selectorOOP = _gst_intern_string ((char *)_gst_abort_execution);
-           _gst_abort_execution = NULL;
-           SEND_MESSAGE (selectorOOP, 0);
-         }
-
         /* First, deal with any async signals.  */
         if (async_queue_enabled)
           empty_async_queue ();
@@ -453,6 +445,15 @@ _gst_interpret (OOP processOOP)
            native_ip = GET_CONTEXT_IP (thisContext);
          }
 
+        if UNCOMMON (_gst_abort_execution)
+         {
+           OOP selectorOOP;
+           selectorOOP = _gst_intern_string ((char *)_gst_abort_execution);
+           _gst_abort_execution = NULL;
+           SEND_MESSAGE (selectorOOP, 0);
+         }
+
+
         if UNCOMMON (time_to_preempt)
          set_preemption_timer ();
       }

> 
> holger



reply via email to

[Prev in Thread] Current Thread [Next in Thread]