]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
write_common: Don't abort if btr_exec_up() failed.
authorAndre Noll <maan@systemlinux.org>
Sun, 28 Nov 2010 21:32:13 +0000 (22:32 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 28 Nov 2010 21:32:13 +0000 (22:32 +0100)
btr_exec_up() failure is unusual but possible if the upper btr node dies just in
the right moment.  It happened for an aac file due to another bug in the fecdec
filter (fixed in a subsequent patch)  which caused the fecdec and hence the aacdec
btr nodes to unregister themselves due to a full buffer tree pool.

So replace the assertion by a fat error message. This sets the sample rate,
channel count and the sample format to zero which makes the writer unregister
itsself. This is better than aborting.

write_common.c

index 93562d0d25781cf157d0c38ce5377bd8d99f2c2a..7131a94042dae3b989a73ee5a1b8cd4c84bf2b02 100644 (file)
@@ -153,7 +153,15 @@ static void get_btr_value(struct btr_node *btrn, const char *cmd,
        char *buf = NULL;
        int ret = btr_exec_up(btrn, cmd, &buf);
 
-       assert(ret >= 0);
+       if (ret < 0) {
+               /*
+                * This really should not happen. It means one of our parent
+                * nodes died unexpectedly. Proceed with fingers crossed.
+                */
+               PARA_CRIT_LOG("cmd %s: %s\n", cmd, para_strerror(-ret));
+               *result = 0;
+               return;
+       }
        ret = para_atoi32(buf, result);
        assert(ret >= 0);
        free(buf);