# HG changeset patch # User Christian Hammond # Date 1061525830 0 # Node ID 33486b749aa9edf995e767e1d8063aab9e44f8fd # Parent 6e25e1e08ffb0bd74eab54125d8198945c608e7c [gaim-migrate @ 7090] Add the same spiffiness to timeouts. committer: Tailor Script diff -r 6e25e1e08ffb -r 33486b749aa9 plugins/perl/common/Gaim.xs --- a/plugins/perl/common/Gaim.xs Fri Aug 22 04:09:06 2003 +0000 +++ b/plugins/perl/common/Gaim.xs Fri Aug 22 04:17:10 2003 +0000 @@ -5,13 +5,13 @@ PROTOTYPES: ENABLE void -timeout_add(plugin, seconds, func, data) +timeout_add(plugin, seconds, callback, data) Gaim::Plugin plugin int seconds - const char *func + SV *callback SV *data CODE: - gaim_perl_timeout_add(plugin, seconds, func, data); + gaim_perl_timeout_add(plugin, seconds, callback, data); void signal_connect(instance, signal, plugin, callback, data) diff -r 6e25e1e08ffb -r 33486b749aa9 plugins/perl/perl-handlers.c --- a/plugins/perl/perl-handlers.c Fri Aug 22 04:09:06 2003 +0000 +++ b/plugins/perl/perl-handlers.c Fri Aug 22 04:17:10 2003 +0000 @@ -14,7 +14,12 @@ { timeout_handlers = g_list_remove(timeout_handlers, handler); - g_free(handler->name); + if (handler->callback != NULL) + SvREFCNT_dec(handler->callback); + + if (handler->data != NULL) + SvREFCNT_dec(handler->data); + g_free(handler); } @@ -23,9 +28,6 @@ { signal_handlers = g_list_remove(signal_handlers, handler); - if (handler->instance != NULL) - SvREFCNT_dec(handler->instance); - if (handler->callback != NULL) SvREFCNT_dec(handler->callback); @@ -45,9 +47,9 @@ ENTER; SAVETMPS; PUSHMARK(sp); - XPUSHs((SV *)handler->args); + XPUSHs((SV *)handler->data); PUTBACK; - call_pv(handler->name, G_EVAL | G_SCALAR); + call_sv(handler->callback, G_EVAL | G_SCALAR); SPAGAIN; PUTBACK; @@ -133,8 +135,7 @@ } void -gaim_perl_timeout_add(GaimPlugin *plugin, int seconds, const char *func, - void *args) +gaim_perl_timeout_add(GaimPlugin *plugin, int seconds, SV *callback, SV *data) { GaimPerlTimeoutHandler *handler; @@ -146,11 +147,14 @@ handler = g_new0(GaimPerlTimeoutHandler, 1); - handler->plugin = plugin; - handler->name = g_strdup(func); - handler->args = args; + handler->plugin = plugin; + handler->callback = (callback != NULL && callback != &PL_sv_undef + ? newSVsv(callback) : NULL); + handler->data = (data != NULL && data != &PL_sv_undef + ? newSVsv(data) : NULL); timeout_handlers = g_list_append(timeout_handlers, handler); + handler->iotag = g_timeout_add(seconds * 1000, perl_timeout_cb, handler); } diff -r 6e25e1e08ffb -r 33486b749aa9 plugins/perl/perl-handlers.h --- a/plugins/perl/perl-handlers.h Fri Aug 22 04:09:06 2003 +0000 +++ b/plugins/perl/perl-handlers.h Fri Aug 22 04:17:10 2003 +0000 @@ -5,8 +5,8 @@ typedef struct { - char *name; - void *args; + SV *callback; + SV *data; GaimPlugin *plugin; int iotag; @@ -23,8 +23,8 @@ } GaimPerlSignalHandler; -void gaim_perl_timeout_add(GaimPlugin *plugin, int seconds, const char *func, - void *args); +void gaim_perl_timeout_add(GaimPlugin *plugin, int seconds, SV *callback, + SV *data); void gaim_perl_timeout_clear_for_plugin(GaimPlugin *plugin); void gaim_perl_timeout_clear(void);