Changeset 1631825
- Timestamp:
- Dec 17, 2008, 3:24:26 PM (16 years ago)
- Branches:
- master, debian, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
- Children:
- f36cd97
- Parents:
- c675b39
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
perlconfig.c
re0096b7 r1631825 517 517 LEAVE; 518 518 } 519 520 void owl_perlconfig_perl_timer(owl_timer *t, void *data) 521 { 522 SV *obj = data; 523 524 if(!SvROK(obj)) { 525 return; 526 } 527 528 dSP; 529 ENTER; 530 SAVETMPS; 531 532 PUSHMARK(SP); 533 XPUSHs(obj); 534 PUTBACK; 535 536 call_method("do_callback", G_DISCARD|G_KEEPERR|G_EVAL); 537 538 SPAGAIN; 539 540 if (SvTRUE(ERRSV)) { 541 owl_function_error("Error in calback: '%s'", SvPV_nolen(ERRSV)); 542 sv_setsv (ERRSV, &PL_sv_undef); 543 } 544 545 PUTBACK; 546 FREETMPS; 547 LEAVE; 548 } 549 550 void owl_perlconfig_perl_timer_destroy(owl_timer *t) 551 { 552 if(SvOK((SV*)t->data)) { 553 SvREFCNT_dec((SV*)t->data); 554 } 555 } -
perlglue.xs
r25cccdc r1631825 399 399 desc, 400 400 ival); 401 402 IV 403 add_timer(after, interval, cb) 404 int after 405 int interval 406 SV *cb 407 PREINIT: 408 SV *ref; 409 owl_timer *t; 410 CODE: 411 ref = sv_rvweaken(newSVsv(cb)); 412 t = owl_select_add_timer(after, 413 interval, 414 owl_perlconfig_perl_timer, 415 owl_perlconfig_perl_timer_destroy, 416 ref); 417 owl_function_debugmsg("Created timer %p", t); 418 RETVAL = (IV)t; 419 OUTPUT: 420 RETVAL 421 422 void 423 remove_timer(timer) 424 IV timer 425 PREINIT: 426 owl_timer *t; 427 CODE: 428 t = (owl_timer*)timer; 429 owl_function_debugmsg("Freeing timer %p", t); 430 owl_select_remove_timer(t); -
perlwrap.pm
r25cccdc r1631825 1228 1228 } 1229 1229 1230 package BarnOwl::Timer; 1231 1232 sub new { 1233 my $class = shift; 1234 my $args = shift; 1235 1236 my $cb = $args->{cb}; 1237 die("Invalid callback pased to BarnOwl::Timer\n") unless ref($cb) eq 'CODE'; 1238 1239 my $self = {cb => $cb}; 1240 1241 bless($self, $class); 1242 1243 $self->{timer} = BarnOwl::Internal::add_timer($args->{after} || 0, 1244 $args->{interval} || 0, 1245 $self); 1246 return $self; 1247 } 1248 1249 sub do_callback { 1250 my $self = shift; 1251 $self->{cb}->($self); 1252 } 1253 1254 sub DESTROY { 1255 my $self = shift; 1256 if(defined($self->{timer})) { 1257 BarnOwl::Internal::remove_timer($self->{timer}); 1258 } 1259 } 1260 1230 1261 1231 1262 # switch to package main when we're done
Note: See TracChangeset
for help on using the changeset viewer.