summaryrefslogtreecommitdiffstats
path: root/ext/sqlite3_api/sqlite3_api.i
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sqlite3_api/sqlite3_api.i')
-rw-r--r--ext/sqlite3_api/sqlite3_api.i12
1 files changed, 12 insertions, 0 deletions
diff --git a/ext/sqlite3_api/sqlite3_api.i b/ext/sqlite3_api/sqlite3_api.i
index a3e5e5b..8254570 100644
--- a/ext/sqlite3_api/sqlite3_api.i
+++ b/ext/sqlite3_api/sqlite3_api.i
@@ -25,6 +25,16 @@ int Sqlite3_ruby_busy_handler(void* data,int value) {
return FIX2INT(result);
}
+static void mark_CallbackData(void* ptr) {
+ CallbackData* cb = (CallbackData*)ptr;
+ if (cb->proc != Qnil)
+ rb_gc_mark(cb->proc);
+ if (cb->proc2 != Qnil)
+ rb_gc_mark(cb->proc2);
+ if (cb->data != Qnil)
+ rb_gc_mark(cb->data);
+}
+
int Sqlite3_ruby_authorizer(void* data,int type,
const char* a,const char* b,const char* c,const char* d)
{
@@ -90,6 +100,8 @@ void Sqlite3_ruby_function_final(sqlite3_context *ctx) {
}
%}
+%markfunc CallbackData "mark_CallbackData";
+
struct CallbackData {
VALUE proc;
VALUE proc2;