diff options
Diffstat (limited to 'ext/sqlite3_api/sqlite3_api.i')
| -rw-r--r-- | ext/sqlite3_api/sqlite3_api.i | 12 |
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; |
