/*
- * Copyright (C) 2006-2014 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006 Andre Noll <maan@tuebingen.mpg.de>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
return -E_GC_WRITE;
}
-static void gc_pre_select(struct sched *s, struct task *t)
+static void gc_pre_select(struct sched *s, void *context)
{
- struct grab_client *gc = task_context(t);
+ struct grab_client *gc = context;
int ret = btr_node_status(gc->btrn, 0, BTR_NT_LEAF);
if (ret == 0)
* We need this forward declaration as post_select() needs
* activate_grab_client and vice versa.
*/
-static int gc_post_select(struct sched *s, struct task *t);
+static int gc_post_select(struct sched *s, void *context);
/**
* Move a grab client to the active list and start it.
return 0;
}
-static int gc_post_select(__a_unused struct sched *s, struct task *t)
+static int gc_post_select(__a_unused struct sched *s, void *context)
{
- struct grab_client *gc = task_context(t);
+ struct grab_client *gc = context;
struct btr_node *btrn = gc->btrn;
int ret;
size_t sz;
ret = gc_check_args(argc, argv, gc);
if (ret < 0)
goto err_out;
- gc->fd = fd;
+ ret = dup(fd);
+ if (ret < 0) {
+ ret = -ERRNO_TO_PARA_ERROR(errno);
+ goto err_out;
+ }
+ gc->fd = ret;
para_list_add(&gc->node, &inactive_grab_client_list);
gc_activate(gc, s);
return 1;