int _init(void) { int retval; extern int install_callbacks(void); extern void remove_callbacks(void); if (install_callbacks() != 0) return (ENXIO); if (boothowto & RB_HALT) debug_enter("obpsym: halt flag (-h) is set.\n"); retval = mod_install(&modlinkage); /* * if load fails remove callback and unlock symbols */ if (retval) { printf("obpsym: Error %d installing OBP syms module\n", retval); remove_callbacks(); } else (void) callb_add(reset_callbacks, 0, CB_CL_CPR_OBP, "obpsym"); return (retval); }
static void f_got_data( INT32 args ) { struct pf_source *s = ((struct callback_prog *)Pike_fp->current_object->storage)->s; remove_callbacks( (struct source *)s ); if( s->str || TYPEOF(Pike_sp[-1]) != PIKE_T_STRING || Pike_sp[-1].u.string->size_shift || Pike_sp[-1].u.string->len == 0) { s->s.eof = 1; pop_n_elems(args); push_int(0); return; } s->str = Pike_sp[-1].u.string; Pike_sp--; pop_n_elems(args-1); push_int(0); if( s->when_data_cb ) s->when_data_cb( s->when_data_cb_arg ); }
void remove_edge_detect(unsigned int gpio) { struct epoll_event ev; struct gpios *g = get_gpio(gpio); if (g == NULL) return; // delete epoll of fd ev.events = EPOLLIN | EPOLLET | EPOLLPRI; ev.data.fd = g->value_fd; epoll_ctl(epfd_thread, EPOLL_CTL_DEL, g->value_fd, &ev); // delete callbacks for gpio remove_callbacks(gpio); // btc fixme - check return result?? gpio_set_edge(gpio, NO_EDGE); g->edge = NO_EDGE; if (g->value_fd != -1) close(g->value_fd); // btc fixme - check return result?? gpio_unexport(gpio); event_occurred[gpio] = 0; delete_gpio(gpio); }
int _fini(void) { int retval; extern void remove_callbacks(void); if (obpheld != 0) return (EBUSY); retval = mod_remove(&modlinkage); /* * if unload succeeds remove callback and unlock symbols */ if (retval == 0) { remove_callbacks(); } return (retval); }
void remove_edge_detect(unsigned int gpio) { struct epoll_event ev; int fd = fd_lookup(gpio); // delete callbacks for gpio remove_callbacks(gpio); // delete epoll of fd epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &ev); // set edge to none gpio_set_edge(gpio, NO_EDGE); // unexport gpio gpio_event_remove(gpio); // clear detected flag event_occurred[gpio] = 0; }
static void free_source( struct source *src ) { remove_callbacks( src ); free_object(((struct pf_source *)src)->cb_obj); free_object(((struct pf_source *)src)->obj); }