/* sample debug callback expecting no client object */ void jpeg2000_info_callback(const char *msg, void *client_data) { char mess[MAX_MESSAGE_LEN + 20]; int message_len = strlen(msg); if (message_len > MAX_MESSAGE_LEN) message_len = MAX_MESSAGE_LEN; if (msg[message_len - 1] == '\n') message_len--; sprintf(mess, "[INFO] %.*s", message_len, msg); printevent(mess); }
static gboolean port_fetch_event_cb (void *arg) { pnode_t *pn = (pnode_t *)arg; _f* fo; uint_t nget = 0; port_event_t pe[PE_ALLOC]; timespec_t timeout; gpointer f; gboolean ret = TRUE; /* FK_W ("IN <======== %s\n", __func__); */ G_LOCK (fen_lock); memset (&timeout, 0, sizeof (timespec_t)); do { nget = 1; if (port_getn (pn->port, pe, PE_ALLOC, &nget, &timeout) == 0) { int i; for (i = 0; i < nget; i++) { fo = (_f*)pe[i].portev_user; /* handle event */ switch (pe[i].portev_source) { case PORT_SOURCE_FILE: /* If got FILE_EXCEPTION or add to port failed, delete the pnode */ fo->is_active = FALSE; if (fo->user_data) { FK_W("%s\n", printevent(F_NAME(fo), pe[i].portev_events, "RAW")); port_add_kevent (pe[i].portev_events, fo->user_data); } else { /* fnode is deleted */ goto L_delete; } if (pe[i].portev_events & FILE_EXCEPTION) { g_hash_table_remove (_obj_fen_hash, fo->user_data); L_delete: FK_W ("[ FREE_FO ] [0x%p]\n", fo); pnode_delete (fo->port); g_free (fo); } break; default: /* case PORT_SOURCE_TIMER: */ FK_W ("[kernel] unknown portev_source %d\n", pe[i].portev_source); } } } else { FK_W ("[kernel] port_getn %s\n", g_strerror (errno)); nget = 0; } } while (nget == PE_ALLOC); /* Processing g_eventq */ port_process_kevents (); if (pn->ref == 0) { pn->port_source_id = 0; ret = FALSE; } G_UNLOCK (fen_lock); /* FK_W ("OUT ========> %s\n", __func__); */ return ret; }