[plt-scheme] Questions about modules, compilation, namespaces, planet and ffi

From: Bruno Deferrari (utizoc at gmail.com)
Date: Sun May 8 21:32:05 EDT 2005

On 5/5/05, Bruno Deferrari <utizoc at gmail.com> wrote:
> Hi, its me again (new problems with the ffi)
> 
> I'm almost finished with the EFL ffi (3500+ lines of ffi code :P ), but
> I'm having some problems, one with mzscheme crashing on library load, and
> other with callbacks.
> 
> * The first one: mzscheme crashes when loading this lib (it only happens with
>   this lib, an only from mzscheme, on mred it loads it without crashing).
>   I'm running plt-scheme 299.100.
> 
> ; code
> (require (lib "foreign.ss"))
> (define libevas (ffi-lib "libevas"))
> ; and here, I get a segv
> 
> ; gdb output
> #0  0x49c157a5 in __pthread_unlock () from /lib/libpthread.so.0
> #1  0x49c12d95 in pthread_mutex_unlock () from /lib/libpthread.so.0
> #2  0x498dee99 in _dl_open () from /lib/libc.so.6
> #3  0x4992be8b in dlopen_doit () from /lib/libdl.so.2
> #4  0x497ccd46 in _dl_catch_error_internal () from /lib/ld-linux.so.2
> #5  0x4992c286 in _dlerror_run () from /lib/libdl.so.2
> #6  0x4992bed4 in dlopen@@GLIBC_2.1 () from /lib/libdl.so.2
> #7  0x0811b785 in free_cl_cif_args ()
> #8  0x0806f867 in scheme_do_eval ()
> #9  0x0806f008 in scheme_do_eval ()
> #10 0x0810668a in scheme_define_parse ()
> #11 0x081047e3 in scheme_define_parse ()
> #12 0x0806e56a in scheme_do_eval ()
> #13 0x0806fafd in scheme_do_eval ()
> ....
> 
> * The second one: I have problems with callbacks, I cant get them to work.
>   This code for example, I hava a callback thats going to be called when
>   the window is rezised (resize-cb), but when that happens, the program
>   stops with an error.
> 
> ...
> (define (resize-cb ee) ; the func called when the win is resized
>   (display "a\n"))
> ...
> (ecore-evas-callback-resize-set ee resize-cb) ; I set the callback
> ...
> (ecore-main-loop-begin) ; I start the main loop
> 
>   Then when I resize the window resize-cb gets called, and after it prints "a"
>   it stops giving the following error:
> 
> Scheme->C: expects argument of type <non-void-C-type>; given #<ctype>
> 
>   The definition of ecore-evas-callback-resize-set is:
> 
> ; C definition :
> ; void ecore_evas_callback_resize_set(Ecore_Evas *ee,
> ;                                     void (*func) (Ecore_Evas *ee));
> 
> (defecore-evas* ecore-evas-callback-resize-set :
>   _EcoreEvas (_fun _EcoreEvas -> _void)
>   -> _void)
> 
>   I don't know what I'm doing wrong, none of the callbacks work.
> 
>   Well, thats was all for today ;)
> 

Well, after looking at foreign.c I found that on ffi_do_callback the return
value's type isn't compared with _void before calling scheme_to_c.
If the type is _void, scheme_to_c will always fail.
Is this whats wrong?? or is it simply wrong to have a _void return type
on callbacks??



Posted on the users mailing list.