Subject: [ruby-ffi] SystemStackError of callback |
From: tlayboy |
Date: 7/1/10 9:40 AM |
To: ruby-ffi |
Hi all,
I am in troble with SystemStackError of callback.
Does anyone know why this error is occured?
My code is like this.
############################
C library
############################
typedef void (*callback)(int, void *);
pthread_t thread;
struct cb_info info;
struct cb_info {
callback cb;
int data;
void *p;
};
void *call(void *data)
{
struct cb_info *info = (struct cb_info *)data;
info->cb(info->data, info->p);
}
void async_call(callback cb, unsigned int data, void *p)
{
int ret;
info.cb = rcb;
info.data = data;
info.p = p;
if ((ret = pthread_create(&thread, NULL, call, (void *)&info)) != 0)
{
perror("ptherad_create");
exit(EXIT_FAILURE);
}
}
############################
Ruby Code
############################
p = FFI::MemoryPointer.new(:int)
p.write_int(2)
async_call(1, p) do |a, b|
100.times do |d|
puts a, b.read_int
end
end
############################
Output
############################
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
/usr/lib/ruby/1.8/pp.rb:133:in `pp': stack level too deep
(SystemStackError)
from /usr/lib/ruby/1.8/pp.rb:77:in `pp'
from /usr/lib/ruby/1.8/pp.rb:119:in `guard_inspect_key'
from /usr/lib/ruby/1.8/pp.rb:77:in `pp'
from /usr/lib/ruby/1.8/pp.rb:60:in `pp'
from /usr/lib/ruby/1.8/pp.rb:59:in `each'
from /usr/lib/ruby/1.8/pp.rb:59:in `pp'
from libcb.rb:35
from (eval):6:in `call'
from (eval):6:in `async_call'
from libcb.rb:34
from libcb.rb:33:in `times'
from libcb.rb:33
thank you,