Hello,

Anand Dixit <[email protected]> writes:

> Resending to the group.My apologies if you receive it twice but I didn't
> see the post in the archives.

Apparently I did not receive it the first time.

>>    I am calling a guile function from my C code. Its a fairly straight
>> forward implementation. However, as I keep calling this function a
>> number of times, it breaks at some point with a segmentation fault. Here
>> is the relevant portion :
>> 
>> int tmp,count=10000;
>> for (tmp=1;tmp<count;tmp++) {
>>              func_symbol = scm_c_lookup("EsourceFn");        
>>   func = scm_variable_ref(func_symbol);
>> ret=scm_call_4(func,scm_int2num(i),scm_int2num(j),scm_int2num(k),scm_double2num(currentTime));
>>              retValue = scm_num2double(ret,0,"fdtd");
>>              printf("Value from guile is tmp=%d %g\n",tmp,retValue);
>>              }
>> 
>> The break point in one case was after 4000+ calls. I was able to
>> localize the point of failure to the "scm_call_4" line. Any clue would
>> be greatly appreciated.

Could you provide a complete backtrace with GDB?  To do that, run GDB as
follows on the `core' file yielded by the segfault:

  $ gdb `which guile` core
  (gdb) bt full

(If there's no `core' file, type "ulimit -c unlimited".)

Could it be that the `EsourceFn' symbol becomes unbound at some point,
or that it becomes bound to something that's not a procedure?  Both
errors should normally be caught gracefully, but it's worth
investigating.

Also, which version of Guile are you using?

Thanks,
Ludo'.



Reply via email to