X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=grab_client.c;h=ecc16fc89bd66d6a71b351b9e468d125bc8a1775;hp=e5f42416f57e87256d3e8e77eb94fa26c384046a;hb=6bcd10bc4ada11a04bc2b7425afe5a8855592cd2;hpb=ef1f130a1f9ac61a51da10ee56c5bd9ef1b52366 diff --git a/grab_client.c b/grab_client.c index e5f42416..ecc16fc8 100644 --- a/grab_client.c +++ b/grab_client.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2011 Andre Noll + * Copyright (C) 2006-2013 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -8,7 +8,6 @@ #include #include -#include #include "para.h" #include "list.h" @@ -77,7 +76,7 @@ static int gc_write(struct grab_client *gc, char *buf, size_t len) if (gc->mode == GM_SLOPPY) return len; } - ret = write_nonblock(gc->fd, buf, len); + ret = xwrite(gc->fd, buf, len); if (ret < 0) goto err; if (ret > 0) @@ -109,7 +108,7 @@ static void gc_pre_select(struct sched *s, struct task *t) * We need this forward declaration as post_select() needs * activate_grab_client and vice versa. */ -static void gc_post_select(struct sched *s, struct task *t); +static int gc_post_select(struct sched *s, struct task *t); /** * Move a grab client to the active list and start it. @@ -141,6 +140,8 @@ static void gc_activate(struct grab_client *gc, struct sched *s) /** * Activate inactive grab clients if possible. * + * \param s Needed to schedule the grab client task. + * * This is called from audiod.c when the current audio file changes. It loops * over all inactive grab clients and checks each grab client's configuration * to determine if the client in question wishes to grab the new stream. If @@ -165,9 +166,7 @@ void activate_grab_clients(struct sched *s) static int gc_close(struct grab_client *gc, int err) { - btr_remove_node(gc->btrn); - btr_free_node(gc->btrn); - gc->btrn = NULL; + btr_remove_node(&gc->btrn); PARA_INFO_LOG("closing gc: %s\n", para_strerror(-err)); list_move(&gc->node, &inactive_grab_client_list); if (err == -E_GC_WRITE || (gc->flags & GF_ONE_SHOT)) { @@ -185,7 +184,7 @@ static int gc_close(struct grab_client *gc, int err) return 0; } -static void gc_post_select(__a_unused struct sched *s, struct task *t) +static int gc_post_select(__a_unused struct sched *s, struct task *t) { struct grab_client *gc = container_of(t, struct grab_client, task); struct btr_node *btrn = gc->btrn; @@ -193,10 +192,9 @@ static void gc_post_select(__a_unused struct sched *s, struct task *t) size_t sz; char *buf; - t->error = 0; ret = btr_node_status(btrn, 0, BTR_NT_LEAF); if (ret == 0) - return; + return 0; if (ret < 0) goto err; sz = btr_next_buffer(btrn, &buf); @@ -206,10 +204,10 @@ static void gc_post_select(__a_unused struct sched *s, struct task *t) goto err; if (ret > 0) btr_consume(btrn, ret); - return; + return 0; err: gc_close(gc, ret); - t->error = ret; + return ret; } static int gc_check_args(int argc, char **argv, struct grab_client *gc)