help-smalltalk
[Top][All Lists]
Advanced

[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;
     }





reply via email to

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