From: Andre Noll <maan@systemlinux.org>
Date: Sun, 31 Mar 2013 19:11:04 +0000 (+0000)
Subject: grab client: Switch to the alternative post select method.
X-Git-Tag: v0.4.13~39^2~3
X-Git-Url: https://git.tuebingen.mpg.de/?a=commitdiff_plain;h=c77e19b4568a32923c0fe43503a4266363056a41;p=paraslash.git

grab client: Switch to the alternative post select method.
---

diff --git a/grab_client.c b/grab_client.c
index a800b70b..31340422 100644
--- a/grab_client.c
+++ b/grab_client.c
@@ -108,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.
@@ -130,7 +130,8 @@ static void gc_activate(struct grab_client *gc, struct sched *s)
 	gc->btrn = btr_new_node(&(struct btr_node_description)
 		EMBRACE(.name = name, .parent = parent));
 	gc->task.pre_select = gc_pre_select;
-	gc->task.post_select = gc_post_select;
+	gc->task.new_post_select = gc_post_select;
+	gc->task.post_select = NULL;
 	snprintf(gc->task.status, sizeof(gc->task.status) - 1, "%s", name);
 	gc->task.status[sizeof(gc->task.status) - 1] = '\0';
 	gc->task.error = 0;
@@ -184,7 +185,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;
@@ -192,10 +193,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);
@@ -205,10 +205,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)