static gboolean recv_message (GIOChannel *channel, GIOCondition cond, gpointer data) { gint fd = g_io_channel_unix_get_fd (channel); gboolean retval = TRUE; #ifdef VERBOSE g_print ("gio-test: ...from %d:%s%s%s%s\n", fd, (cond & G_IO_ERR) ? " ERR" : "", (cond & G_IO_HUP) ? " HUP" : "", (cond & G_IO_IN) ? " IN" : "", (cond & G_IO_PRI) ? " PRI" : ""); #endif if (cond & (G_IO_ERR | G_IO_HUP)) { shutdown_source (data); retval = FALSE; } if (cond & G_IO_IN) { char buf[BUFSIZE]; guint nbytes; guint nb; int i, j, seq; GIOError error; error = read_all (fd, channel, (gchar *) &seq, sizeof (seq), &nb); if (error == G_IO_ERROR_NONE) { if (nb == 0) { #ifdef VERBOSE g_print ("gio-test: ...from %d: EOF\n", fd); #endif shutdown_source (data); return FALSE; } g_assert (nb == sizeof (nbytes)); for (i = 0; i < nkiddies; i++) if (seqtab[i].fd == fd) { g_assert_cmpint (seq, ==, seqtab[i].seq); seqtab[i].seq++; break; } error = read_all (fd, channel, (gchar *) &nbytes, sizeof (nbytes), &nb); }
static void close_card(ALSA_CARD *card) { dev_stop(card); if (card->handle != NULL) { snd_pcm_hw_params_free(card->hparams); snd_pcm_close(card->handle); card->handle = NULL; } if (card->ringbuf != NULL) jack_ringbuffer_free(card->ringbuf); shutdown_source(&card->base); log_msg("ALSA: close card %s '%s'\n", card->device, card->name); free(card->device); free(card->name); free(card); return; }
static gboolean recv_message (GIOChannel *channel, GIOCondition cond, gpointer data) { gint fd = g_io_channel_unix_get_fd (channel); gboolean retval = TRUE; #ifdef VERBOSE g_print ("gio-test: ...from %d:%s%s%s%s\n", fd, (cond & G_IO_ERR) ? " ERR" : "", (cond & G_IO_HUP) ? " HUP" : "", (cond & G_IO_IN) ? " IN" : "", (cond & G_IO_PRI) ? " PRI" : ""); #endif if (cond & (G_IO_ERR | G_IO_HUP)) { shutdown_source (data); retval = FALSE; } if (cond & G_IO_IN) { char buf[BUFSIZE]; guint nbytes; guint nb; int i, j, seq; GIOError error; error = read_all (fd, channel, (gchar *) &seq, sizeof (seq), &nb); if (error == G_IO_ERROR_NONE) { if (nb == 0) { #ifdef VERBOSE g_print ("gio-test: ...from %d: EOF\n", fd); #endif shutdown_source (data); return FALSE; } g_assert (nb == sizeof (nbytes)); for (i = 0; i < nkiddies; i++) if (seqtab[i].fd == fd) { if (seq != seqtab[i].seq) { g_print ("gio-test: ...from %d: invalid sequence number %d, expected %d\n", fd, seq, seqtab[i].seq); g_assert_not_reached (); } seqtab[i].seq++; break; } error = read_all (fd, channel, (gchar *) &nbytes, sizeof (nbytes), &nb); } if (error != G_IO_ERROR_NONE) return FALSE; if (nb == 0) { #ifdef VERBOSE g_print ("gio-test: ...from %d: EOF\n", fd); #endif shutdown_source (data); return FALSE; } g_assert (nb == sizeof (nbytes)); if (nbytes >= BUFSIZE) { g_print ("gio-test: ...from %d: nbytes = %d (%#x)!\n", fd, nbytes, nbytes); g_assert_not_reached (); } g_assert (nbytes >= 0 && nbytes < BUFSIZE); #ifdef VERBOSE g_print ("gio-test: ...from %d: %d bytes\n", fd, nbytes); #endif if (nbytes > 0) { error = read_all (fd, channel, buf, nbytes, &nb); if (error != G_IO_ERROR_NONE) return FALSE; if (nb == 0) { #ifdef VERBOSE g_print ("gio-test: ...from %d: EOF\n", fd); #endif shutdown_source (data); return FALSE; } for (j = 0; j < nbytes; j++) if (buf[j] != ' ' + ((nbytes + j) % 95)) { g_print ("gio-test: ...from %d: buf[%d] == '%c', should be '%c'\n", fd, j, buf[j], 'a' + ((nbytes + j) % 32)); g_assert_not_reached (); } #ifdef VERBOSE g_print ("gio-test: ...from %d: OK\n", fd); #endif } } return retval; }