]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 't/mood_cleanups'
authorAndre Noll <maan@systemlinux.org>
Sun, 1 Dec 2013 00:14:37 +0000 (01:14 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 1 Dec 2013 00:16:50 +0000 (01:16 +0100)
Cooking since 2011-10-13, seems to be fine.

6bcd10 mood: Deduplicate score formula.
f24778 mood: Combine compute_num_played_score() and compute_last_played_score().
62a968 mood: Don't open-code compute_dynamic_score().
2c85cd mood: Don't add files without valid information to the score table.
5e9ded mood: Simplify compute_dynamic_score().
ab9f71 mood.c: Remove unused int_log2().

NEWS
amp_filter.c
buffer_tree.c
buffer_tree.h
configure.ac
play.c
prebuffer_filter.c
server.c
wav_filter.c

diff --git a/NEWS b/NEWS
index d1155022a36e1c1ccf623c5eea59fd514463ed2f..980f613a7915e1a48d429ba17993d57572f4184f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ NEWS
 ----------------------------------------------
 
        - audiod improvements and fixes.
+       - buffer tree robustness improvements.
+       - cleanup of the mood subsystem.
 
 ----------------------------------------
 0.5.0 (2013-08-23) "invertible validity"
index dddc0a85c3c11f29294074c9b6d565729dfc6e98..b0f3687212a1e1a4f4106bba8356bfe84b934d87 100644 (file)
@@ -73,7 +73,7 @@ static int amp_post_select(__a_unused struct sched *s, struct task *t)
        bool inplace = btr_inplace_ok(btrn);
 
        if (pad->amp == 0) { /* no amplification */
-               btr_splice_out_node(btrn);
+               btr_splice_out_node(&fn->btrn);
                return -E_AMP_ZERO_AMP;
        }
 next_buffer:
index b1eeb0363e3741d288656e8c5cea5aa9d186c0ab..56ab2b24cccd3e0b1f0bd786006cd3c08ab6424f 100644 (file)
@@ -835,7 +835,7 @@ size_t btr_get_input_queue_size(struct btr_node *btrn)
 /**
  * Remove a node from the buffer tree, reconnecting parent and children.
  *
- * \param btrn The node to splice out.
+ * \param btrnp The node to splice out.
  *
  * This function is used by buffer tree nodes that do not exist during the
  * whole lifetime of the buffer tree. Unlike btr_remove_node(), calling
@@ -843,9 +843,9 @@ size_t btr_get_input_queue_size(struct btr_node *btrn)
  * but reconnects the buffer tree by making all child nodes of \a btrn children
  * of the parent of \a btrn.
  */
-void btr_splice_out_node(struct btr_node *btrn)
+void btr_splice_out_node(struct btr_node **btrnp)
 {
-       struct btr_node *ch, *tmp;
+       struct btr_node *btrn = *btrnp, *ch, *tmp;
 
        assert(btrn);
        PARA_NOTICE_LOG("splicing out %s\n", btrn->name);
@@ -862,7 +862,7 @@ void btr_splice_out_node(struct btr_node *btrn)
                        list_del(&ch->node);
        }
        assert(list_empty(&btrn->children));
-       btrn->parent = NULL;
+       *btrnp = NULL;
 }
 
 /**
@@ -1203,21 +1203,20 @@ int btr_node_status(struct btr_node *btrn, size_t min_iqs,
        size_t iqs;
 
        assert(btrn);
-       if (type != BTR_NT_LEAF) {
-               if (btr_no_children(btrn))
-                       return -E_BTR_NO_CHILD;
-               if (btr_get_output_queue_size(btrn) > BTRN_MAX_PENDING)
-                       return 0;
-       }
-       if (type != BTR_NT_ROOT) {
-               if (btr_eof(btrn))
-                       return -E_BTR_EOF;
-               iqs = btr_get_input_queue_size(btrn);
-               if (iqs == 0) /* we have a parent, because not eof */
-                       return 0;
-               if (iqs < min_iqs && !btr_no_parent(btrn))
-                       return 0;
-       }
+       if (type != BTR_NT_LEAF && btr_no_children(btrn))
+               return -E_BTR_NO_CHILD;
+       if (type != BTR_NT_ROOT && btr_eof(btrn))
+               return -E_BTR_EOF;
+
+       if (btr_get_output_queue_size(btrn) > BTRN_MAX_PENDING)
+               return 0;
+       if (type == BTR_NT_ROOT)
+               return 1;
+       iqs = btr_get_input_queue_size(btrn);
+       if (iqs == 0) /* we have a parent, because not eof */
+               return 0;
+       if (iqs < min_iqs && !btr_no_parent(btrn))
+               return 0;
        return 1;
 }
 
index 20dcd62dda5a531fdf10fe4a01b3669dad39e2ca..6127dd92a1373b37c2315dd03cb9d364d1a15d10 100644 (file)
@@ -192,7 +192,7 @@ size_t btr_next_buffer(struct btr_node *btrn, char **bufp);
 size_t btr_next_buffer_omit(struct btr_node *btrn, size_t omit, char **bufp);
 void btr_consume(struct btr_node *btrn, size_t numbytes);
 int btr_exec_up(struct btr_node *btrn, const char *command, char **value_result);
-void btr_splice_out_node(struct btr_node *btrn);
+void btr_splice_out_node(struct btr_node **btrnp);
 void btr_pushdown(struct btr_node *btrn);
 void *btr_context(struct btr_node *btrn);
 void btr_merge(struct btr_node *btrn, size_t dest_size);
index 73e97997162e7435c0ad9db22494049904af4b82..85d3088689f3980eaccb75562d36cea4f0a85b55 100644 (file)
@@ -694,7 +694,7 @@ if test "$have_ogg" = "yes"; then
                CPPFLAGS="$CPPFLAGS $opus_cppflags"
        fi
        if test -n "$with_opus_libs"; then
-               speex_libs="-L$with_opus_libs"
+               opus_libs="-L$with_opus_libs"
                LDFLAGS="$LDFLAGS $opus_libs"
        fi
        AC_CHECK_LIB([opus], [opus_multistream_decode], [], [ have_opus="no" ])
diff --git a/play.c b/play.c
index 6eed58ab53779dd22afb9442d002b60c71165525..01125ab647f73482bb248ecdbaac2b8b2ad13021 100644 (file)
--- a/play.c
+++ b/play.c
@@ -431,7 +431,7 @@ static int load_next_file(struct play_task *pt)
        int ret;
 
 again:
-       if (pt->rq == CRT_NONE || pt->rq == CRT_FILE_CHANGE) {
+       if (pt->rq == CRT_NONE) {
                pt->start_chunk = 0;
                ret = next_valid_file(pt);
                if (ret < 0)
index 655c981b921e0a0b484b5567ad9d448077d39631..f4ef76e245c98ca141caf4bd04e8594087ac6da6 100644 (file)
@@ -70,7 +70,7 @@ static int prebuffer_post_select(__a_unused struct sched *s, struct task *t)
                return 0;
        if (iqs < conf->size_arg)
                return 0;
-       btr_splice_out_node(fn->btrn);
+       btr_splice_out_node(&fn->btrn);
        return -E_PREBUFFER_SUCCESS;
 }
 
index 36af088ec64e0b4fd2baac06cd773653858853f0..70d9137e7073cf7e7c7e9d3e598c742a26657560 100644 (file)
--- a/server.c
+++ b/server.c
@@ -388,6 +388,9 @@ static int command_post_select(struct sched *s, struct task *t)
                goto out;
        }
        if (child_pid) {
+               /* avoid problems with non-fork-safe PRNGs */
+               unsigned char buf[16];
+               get_random_bytes_or_die(buf, sizeof(buf));
                close(new_fd);
                /* parent keeps accepting connections */
                return 0;
index 83b81fb2d5b4b9303feb1600cb808fe52accfa51..eaef1f5cca7b79c4b532d91dda239aaa7e53c0ee 100644 (file)
@@ -113,7 +113,7 @@ static int wav_post_select(__a_unused struct sched *s, struct task *t)
        ret = -E_WAV_SUCCESS;
 err:
        if (ret == -E_WAV_SUCCESS)
-               btr_splice_out_node(btrn);
+               btr_splice_out_node(&fn->btrn);
        else {
                btr_remove_node(&fn->btrn);
                PARA_ERROR_LOG("%s\n", para_strerror(-ret));