[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