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.
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);