[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH] maybe fix GNU Smalltalk 3.0c build on alpha
From: |
Paolo Bonzini |
Subject: |
[Help-smalltalk] [PATCH] maybe fix GNU Smalltalk 3.0c build on alpha |
Date: |
Mon, 15 Sep 2008 07:23:43 +0200 |
User-agent: |
Thunderbird 2.0.0.16 (Macintosh/20080707) |
Build log at
http://experimental.debian.net/fetch.php?&pkg=gnu-smalltalk&ver=3.1~rc3-2&arch=alpha&stamp=1220876485&file=log&as=raw
The bug looks like a GC problem. The result of the SQLite call is zero,
but the descriptor has moved, the return type is not anymore #int, and
so nil is returned instead of zero. I'm not sure, but it looks like a
plausible explanation and if this is the case, this patch would fix it.
The bug is present on all platforms, but just shows up on alpha for some
weird reason (and also not so weird reasons: 64-bit = more memory = more
GCs).
The only thing blocking 3.1 is the Windows port (if this is actually a
fix for the alpha build).
If anyone can connect to IRC and run a couple of tests, including
running a (safe! :-) executable, please drop me a line by e-mail.
Paolo
2008-09-14 Paolo Bonzini <address@hidden>
* cint.c: Fix possible GC bugs.
diff --git a/libgst/cint.c b/libgst/cint.c
index 2bcb2c7..4f34c27 100644
--- a/libgst/cint.c
+++ b/libgst/cint.c
@@ -719,6 +719,10 @@ _gst_invoke_croutine (OOP cFuncOOP,
incPtr = INC_SAVE_POINTER ();
+ /* Make sure the parameters do not die. */
+ INC_ADD_OOP (cFuncOOP);
+ INC_ADD_OOP (receiver);
+
funcAddr = cobject_value (cFuncOOP);
if (!funcAddr)
return (NULL);
@@ -815,7 +819,9 @@ _gst_invoke_croutine (OOP cFuncOOP,
ffi_call (&c_func_cur->cacheCif, FFI_FN (funcAddr), &result.u,
ffi_arg_vec);
_gst_set_errno (errno);
+ desc = (gst_c_callable) OOP_TO_OBJ (cFuncOOP);
oop = c_to_smalltalk (&result, receiver, desc->returnTypeOOP);
+ INC_ADD_OOP (oop);
/* Fixup all returned string variables */
if (needPostprocessing)
@@ -1142,6 +1148,8 @@ push_smalltalk_obj (OOP oop,
{
cparam *cp = &c_func_cur->args[c_func_cur->arg_idx];
ffi_type *type = smalltalk_to_c (oop, cp, cType);
+ if (cp->oop && !IS_NIL (cp->oop))
+ INC_ADD_OOP (cp->oop);
if (type)
c_func_cur->types[c_func_cur->arg_idx++] = type;
}
- [Help-smalltalk] [PATCH] maybe fix GNU Smalltalk 3.0c build on alpha,
Paolo Bonzini <=