Hi, we are having a problem with callbacks in alien and we would like to see
if we are doing something wrong or if it is a bug in the implementation (for
the standard old vm).
We are receiving the callback just in the middle of a primitiveExternalCall
(actually to a function that will fail because the plugin is not present,
but i don't think that's important). We pinned it to occur always in the
same line, which is
longAtput((lit + (BASE_HEADER_SIZE)) + (2 << (SHIFT_FOR_WORD)), ConstZero);
of primitiveExternalCall. When the callback occurs, the thunkEntry is
called, which if we understand correctly, saves the active context and runs
the interpreter by calling sendInvokeCallbackStackRegistersJmpbuf. The
problem is that things like messageSelector and lkupClass, which are global
variables are not saved while saving the context, and when the callback
returns, the last line of primitiveExternalCall,
rewriteMethodCacheSelclassprimIndex(messageSelector, lkupClass, 0);
puts a 0 in the wrong place. Also, probably as las message sent
was primReturnFromContext:through: (because we just returned from the
context), we get a primitiveFailed, but not for the original called function
but for primReturnFromContext:through:.
What do you think? are we missing something?
Ciudad de Buenos Aires