projects
/
paraslash.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5edb8fd
)
audiod: Replace kill_btrn() by task notifications.
author
Andre Noll
<maan@systemlinux.org>
Sun, 8 Jul 2012 14:58:45 +0000
(14:58 +0000)
committer
Andre Noll
<maan@systemlinux.org>
Sun, 18 Nov 2012 19:28:27 +0000
(20:28 +0100)
audiod.c
patch
|
blob
|
history
client_common.c
patch
|
blob
|
history
diff --git
a/audiod.c
b/audiod.c
index f8dde0c2a2f1427ac38e6e598b7e169ff7d626b0..03705089ff528f37aaf31a26ddf604ad884b1862 100644
(file)
--- a/
audiod.c
+++ b/
audiod.c
@@
-440,20
+440,6
@@
static void close_filters(struct slot_info *s)
s->fns = NULL;
}
s->fns = NULL;
}
-/*
- * Whenever a task commits suicide by returning from post_select with t->error
- * < 0, it also removes its btr node. We do exactly that to kill a running
- * task. Note that the scheduler checks t->error also _before_ each pre/post
- * select call, so the victim will never be scheduled again.
- */
-static void kill_btrn(struct btr_node **btrnp, struct task *t, int error)
-{
- if (t->error < 0)
- return;
- t->error = error;
- btr_remove_node(btrnp);
-}
-
static void notify_receivers(int error)
{
int i;
static void notify_receivers(int error)
{
int i;
@@
-1197,7
+1183,7
@@
static void status_post_select(struct sched *s, struct task *t)
if (!st->ct)
goto out;
if (st->ct->task.error >= 0) {
if (!st->ct)
goto out;
if (st->ct->task.error >= 0) {
-
kill_btrn(&st->ct->btrn, &st->ct->task, -
E_AUDIOD_OFF);
+
task_notify(&st->ct->task,
E_AUDIOD_OFF);
goto out;
}
close_stat_pipe();
goto out;
}
close_stat_pipe();
@@
-1219,15
+1205,14
@@
static void status_post_select(struct sched *s, struct task *t)
struct timeval diff;
tv_diff(now, &st->last_status_read, &diff);
if (diff.tv_sec > 61)
struct timeval diff;
tv_diff(now, &st->last_status_read, &diff);
if (diff.tv_sec > 61)
- kill_btrn(&st->ct->btrn, &st->ct->task,
- -E_STATUS_TIMEOUT);
+ task_notify(&st->ct->task, E_AUDIOD_OFF);
goto out;
}
btr_merge(st->btrn, st->min_iqs);
sz = btr_next_buffer(st->btrn, &buf);
ret = for_each_stat_item(buf, sz, update_item);
if (ret < 0) {
goto out;
}
btr_merge(st->btrn, st->min_iqs);
sz = btr_next_buffer(st->btrn, &buf);
ret = for_each_stat_item(buf, sz, update_item);
if (ret < 0) {
-
kill_btrn(&st->ct->btrn, &st->ct->task, ret
);
+
task_notify(&st->ct->task, E_AUDIOD_OFF
);
goto out;
}
if (sz != ret) {
goto out;
}
if (sz != ret) {
diff --git
a/client_common.c
b/client_common.c
index a4aa6d8c3ecc3ae386cbb14515f05f8257d96e0d..78b232dbd043caf1dc0ee6ba58b3437000e0d86a 100644
(file)
--- a/
client_common.c
+++ b/
client_common.c
@@
-333,7
+333,9
@@
static void client_post_select(struct sched *s, struct task *t)
size_t n;
char buf[CLIENT_BUFSIZE];
size_t n;
char buf[CLIENT_BUFSIZE];
- t->error = 0;
+ ret = task_get_notification(t);
+ if (ret < 0)
+ goto out;
if (ct->scc.fd < 0)
return;
switch (ct->status) {
if (ct->scc.fd < 0)
return;
switch (ct->status) {