]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 't/periodic_header_optional'
authorAndre Noll <maan@systemlinux.org>
Sat, 22 Jan 2011 15:57:02 +0000 (16:57 +0100)
committerAndre Noll <maan@systemlinux.org>
Sat, 22 Jan 2011 15:57:02 +0000 (16:57 +0100)
120 files changed:
Makefile.in
NEWS
aac.h
aac_afh.c
aac_common.c
aacdec_filter.c
acl.c
acl.h
afh.c
afh.h
afh_common.c
afs.c
afs.h
aft.c
alsa_write.c
amp_filter.c
attribute.c
audioc.c
audiod.c
audiod.h
audiod_command.c
blob.c
buffer_tree.c
buffer_tree.h
chunk_queue.c
chunk_queue.h
client.c
client.h
client_common.c
close_on_fork.c
command.c
compress_filter.c
crypt.c
crypt.h
daemon.c
dccp_recv.c
dccp_send.c
error.h
exec.c
fade.c
fd.c
fd.h
fecdec_filter.c
file_write.c
filter.c
filter.h
filter_common.c
ggo.c
ggo.h
grab_client.c
grab_client.h
gui.c
gui.h
gui_theme.c
hash.h
http_recv.c
http_send.c
ipc.c
mm.c
mm.h
mood.c
mood.h
mp3_afh.c
mp3dec_filter.c
net.c
net.h
ogg_afh.c
ogg_afh_common.c
ogg_afh_common.h
oggdec_filter.c
oss_write.c
osx_write.c
para.h
playlist.c
portable_io.h
prebuffer_filter.c
recv.c
recv.h
recv_common.c
ringbuffer.c
ringbuffer.h
sched.c
sched.h
score.c
send.h
send_common.c
server.c
server.h
sha1.c
signal.c
signal.h
spx.h
spx_afh.c
spx_common.c
spxdec_filter.c
stat.c
stdin.c
stdin.h
stdout.c
stdout.h
string.c
string.h
time.c
udp_recv.c
udp_send.c
user_list.c
user_list.h
versions/paraslash-0.4.5.tar.bz2 [new file with mode: 0644]
versions/paraslash-0.4.5.tar.bz2.asc [new file with mode: 0644]
vss.c
vss.h
wav_filter.c
web/footer.html
web/index.in.html
wma_afh.c
wma_common.c
write.c
write.h
write_common.c
write_common.h

index 994aadd546da55a93455e64e3c8172542a4a9d8d..3fbbce21ab5f3fe91d674750a4d3f7804c346188 100644 (file)
@@ -14,7 +14,7 @@ build_date := $(shell date)
 uname_s := $(shell uname -s 2>/dev/null || echo "UNKNOWN_OS")
 uname_rs := $(shell uname -rs)
 cc_version := $(shell $(CC) --version | head -n 1)
-codename := symmetric randomization
+codename := deterministic entropy
 
 DEBUG_CPPFLAGS += -Wno-sign-compare -g -Wunused -Wundef -W
 DEBUG_CPPFLAGS += -Wredundant-decls
diff --git a/NEWS b/NEWS
index 239964e03af41f2ef536a55878e0069746fcbb3b..adcc23eb32bef81071b159abcd87160074c6ea19 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,18 +1,22 @@
--------------------------------------------------
-0.4.5 (to be announced) "symmetric randomization"
--------------------------------------------------
+-----------------------------------------------
+0.4.6 (to be announced) "deterministic entropy"
+-----------------------------------------------
 
-Mainly bug fixes and the var_fec_slices patch set.
+--------------------------------------------
+0.4.5 (2010-12-17) "symmetric randomization"
+--------------------------------------------
+
+Bug fixes, internal cleanups and variable-sized FEC slices.
 
        - Contains a fix for an invalid-free-bug in the ogg audio format
          handler code.
        - Switching off the DCCP sender works again.
        - para_audiod handles crashes of para_server more robustly.
-       - Internal scheduler cleanups.
-       - reduced latency due to variable sized FEC slices.
+       - Internal scheduler and writer cleanups.
+       - Reduced latency due to variable-sized FEC slices.
        - Improved documentation and error diagnostics.
-       - The build of para_server is now optional, allowing to build the
-         client side executables if libosl is not installed.
+       - The build of para_server is now optional, allowing the build
+         to succeed in case libosl is not installed.
 
 ------------------------------------------
 0.4.4 (2010-08-06) "persistent regularity"
diff --git a/aac.h b/aac.h
index 0a4db41fbe83ff486989634b5a03344df13e9737..0653d35af91efd5ddd543207fd81d186b4b6fbf7 100644 (file)
--- a/aac.h
+++ b/aac.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 3e394337b4b33f693be416ab7d90872113f9bf50..94b0f8b34cdb69787c86ae2dd333d7a3b1914e84 100644 (file)
--- a/aac_afh.c
+++ b/aac_afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 68c3c89b58d03e452fa8aa1b10cf642e616714c7..14662fddecec4b989a2c828959167b23c07e485c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 1127fc1132b90d56169c34d732c9343e47e8fa43..1ac6a99a225ea4b6c4f4faa72ce825dfd285ae72 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/acl.c b/acl.c
index 02df1e481e8f683a90d0c69a5ced3c40cf3f9e9c..132350dd1bfe033568584ccd4641e388fa011bcf 100644 (file)
--- a/acl.c
+++ b/acl.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/acl.h b/acl.h
index 65ccc7481a81216ceebe3841a7c85c132f160704..14950b363d50597358ded2b22185544cd71ee615 100644 (file)
--- a/acl.h
+++ b/acl.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2008-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/afh.c b/afh.c
index b66e260adf47d9b4350d8d05610e8945c6a8efad..5ce6cfc5a13c383030fe10c240eba8468add021c 100644 (file)
--- a/afh.c
+++ b/afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2008-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/afh.h b/afh.h
index ccfed2fbe897d368eb7e836d16074d52d5f7ccb1..8f74e236501189de420d1eec75a9a40b952b1707 100644 (file)
--- a/afh.h
+++ b/afh.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 952ef7ca2965fb3a759e6a46296f1227615d6bce..dd2ae6507e7510da3d1e57c95e03cda51fbf74ca 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/afs.c b/afs.c
index 97c3d5694a8dd83fd24c753495bf1411011ae7b9..2fb28b71eeabca63194400731ef19499b83806ca 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/afs.h b/afs.h
index ba5e134c94fcd7ac6aeb4179c611969038f285f0..699998b03979abb33afa8eb9fae5db709ddffd2a 100644 (file)
--- a/afs.h
+++ b/afs.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/aft.c b/aft.c
index aa6ef08f21d1ab92afd557fc0b422cc90c7c61e4..412318b27eb656acabbb5c66faa352c8f56494c3 100644 (file)
--- a/aft.c
+++ b/aft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index bcabe53cb704f86144fb6ff2bf5da5024b39d02a..d649341837d3284f7aaf9b1fc83ab22f217826b6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -35,7 +35,7 @@
 struct private_alsa_write_data {
        /** The alsa handle */
        snd_pcm_t *handle;
-       /** Determined and set by alsa_open(). */
+       /** Determined and set by alsa_init(). */
        int bytes_per_frame;
        /** The approximate maximum buffer duration in us. */
        unsigned buffer_time;
@@ -142,28 +142,18 @@ static int alsa_init(struct private_alsa_write_data *pad,
        return 1;
 }
 
-/* Open an instance of the alsa writer. */
-static int alsa_open(struct writer_node *wn)
-{
-       wn->private_data = para_calloc(sizeof(struct private_alsa_write_data));
-       return 1;
-}
-
 static void alsa_write_pre_select(struct sched *s, struct task *t)
 {
        struct writer_node *wn = container_of(t, struct writer_node, task);
        struct private_alsa_write_data *pad = wn->private_data;
        struct timeval tv;
        snd_pcm_sframes_t avail, underrun;
-       int ret;
+       int ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
 
-       if (!pad->handle)
-               return;
-       ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
-       if (ret < 0)
-               sched_request_timeout_ms(20, s);
-       if (ret <= 0)
+       if (ret == 0)
                return;
+       if (ret < 0 || !pad)
+               return sched_min_delay(s);
        /*
         * Data is available to be written to the alsa handle.  Compute number
         * of milliseconds until next buffer underrun would occur.
@@ -191,16 +181,16 @@ static void alsa_close(struct writer_node *wn)
        struct private_alsa_write_data *pad = wn->private_data;
        PARA_INFO_LOG("closing writer node %p\n", wn);
 
-       if (pad->handle) {
-               /*
-                * It's OK to have a blocking operation here because we already
-                * made sure that the PCM output buffer is (nearly) empty.
-                */
-               snd_pcm_nonblock(pad->handle, 0);
-               snd_pcm_drain(pad->handle);
-               snd_pcm_close(pad->handle);
-               snd_config_update_free_global();
-       }
+       if (!pad)
+               return;
+       /*
+        * It's OK to have a blocking operation here because we already made
+        * sure that the PCM output buffer is (nearly) empty.
+        */
+       snd_pcm_nonblock(pad->handle, 0);
+       snd_pcm_drain(pad->handle);
+       snd_pcm_close(pad->handle);
+       snd_config_update_free_global();
        free(pad);
 }
 
@@ -222,10 +212,10 @@ again:
                return;
        btr_merge(btrn, wn->min_iqs);
        bytes = btr_next_buffer(btrn, &data);
-       if (ret < 0 || bytes < pad->bytes_per_frame) { /* eof */
+       if (ret < 0 || bytes < wn->min_iqs) { /* eof */
                assert(btr_no_parent(btrn));
                ret = -E_ALSA_EOF;
-               if (!pad->handle)
+               if (!pad)
                        goto err;
                /* wait until pending frames are played */
                if (pad->drain_barrier.tv_sec == 0) {
@@ -238,9 +228,11 @@ again:
                        goto err;
                return;
        }
-       if (!pad->handle) {
+       if (!pad) {
                int32_t val;
 
+               pad = para_calloc(sizeof(*pad));
+               wn->private_data = pad;
                if (bytes == 0) /* no data available */
                        return;
                get_btr_sample_rate(btrn, &val);
@@ -279,21 +271,14 @@ err:
        t->error = ret;
 }
 
-__malloc static void *alsa_parse_config(const char *options)
+__malloc static void *alsa_parse_config_or_die(const char *options)
 {
-       int ret;
-       struct alsa_write_args_info *conf
-               = para_calloc(sizeof(struct alsa_write_args_info));
+       struct alsa_write_args_info *conf = para_calloc(sizeof(*conf));
 
        PARA_INFO_LOG("options: %s, %zd\n", options, strcspn(options, " \t"));
-       ret = alsa_cmdline_parser_string(options, conf, "alsa_write");
-       if (ret)
-               goto err_out;
-       PARA_INFO_LOG("help given: %d\n", conf->help_given);
+       /* exits on errors */
+       alsa_cmdline_parser_string(options, conf, "alsa_write");
        return conf;
-err_out:
-       free(conf);
-       return NULL;
 }
 
 static void alsa_free_config(void *conf)
@@ -313,11 +298,10 @@ void alsa_write_init(struct writer *w)
        struct alsa_write_args_info dummy;
 
        alsa_cmdline_parser_init(&dummy);
-       w->open = alsa_open;
        w->close = alsa_close;
        w->pre_select = alsa_write_pre_select;
        w->post_select = alsa_write_post_select;
-       w->parse_config = alsa_parse_config;
+       w->parse_config_or_die = alsa_parse_config_or_die;
        w->shutdown = NULL; /* nothing to do */
        w->free_config = alsa_free_config;
        w->help = (struct ggo_help) {
index 29c62e3bf580931788d28c0dd5ddb051f119f256..21fd9fd179a3885e7f25664fbfae60029922536b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index a353f1417d8052ad411ba3e31c5da783880c37d9..24536911affeceffb029f806de4aa6d4b03d362a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index b17be3dd1d0a97a175feeff2e3b8f971ad3f725f..74fb824cfff9d7193ebe42af9bfdc97ed5863fe0 100644 (file)
--- a/audioc.c
+++ b/audioc.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 89b160db527ae9397a2bd2b216b304d6c4c8920f..8b62e083fa8bde9b153e97e66315f2a03c4cbdcb 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 44b430c8274856b4a13771dc2668ab5a6e5e04f9..94399602b22280afbe88304cad8d832349f26780 100644 (file)
--- a/audiod.h
+++ b/audiod.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index ce1aff68896461f5fbe78be49f7690ee1d82462a..eed9fc154c7191513c3e315a65fe552641823b1b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/blob.c b/blob.c
index 44159a6fecf7f16f7fd9548003f2b3df90a77367..cbf2af49395f09b00aa322774ec79118d181daa4 100644 (file)
--- a/blob.c
+++ b/blob.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index bdcbec8de73c0348ea0a0e223e38b3584bee488a..c5417c2b7fd447e9fa118d4b67e7a91e30b6814e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 8bc8e6029c841482bdfb8c5a01e0c4fc1d2b404e..fcf9df62570a6a2bab3acc1fc1a54831b541ccc4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 468b1dc2dd4828796d53e5804d6f28611b88c462..c0a8fb5179b96a0b6aa4c0a17ccf967d5718963b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -93,34 +93,6 @@ void cq_dequeue(struct chunk_queue *cq)
        free(qc);
 }
 
-/**
- * Force to add a chunk to the given queue.
- *
- * \param cq See \ref cq_enqueue.
- * \param buf See \ref cq_enqueue.
- * \param num_bytes See \ref cq_enqueue.
- *
- * If queuing the given buffer would result in exceeding the maximal queue
- * size, buffers are dropped from the beginning of the queue. Note that this
- * function still might fail.
- *
- * \return Standard.
- */
-int cq_force_enqueue(struct chunk_queue *cq, const char *buf, size_t num_bytes)
-{
-       int ret;
-
-       if (num_bytes > cq->max_pending)
-               return -E_QUEUE;
-       for (;;) {
-               ret = cq_enqueue(cq, buf, num_bytes);
-               if (ret >= 0)
-                       return ret;
-               cq_dequeue(cq);
-       }
-       /* never reached */
-}
-
 /**
  * Change the number of bytes sent for the current queued chunk.
  *
index 9e794ba8e8afd524f4837bf9be7ee891ecd8f4e3..bcd43f8e98c0b8368c60b706ad66f6ce49cd7a7a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -16,4 +16,3 @@ void cq_update(struct chunk_queue *cq, size_t sent);
 int cq_get(struct queued_chunk *qc, const char **buf, size_t *len);
 struct chunk_queue *cq_new(size_t max_pending);
 void cq_destroy(struct chunk_queue *cq);
-int cq_force_enqueue(struct chunk_queue *cq, const char *buf, size_t num_bytes);
index 0b4afbd30ca0a9c6b7a9d128b77d8ace9b302928..ec32cd414e31df10dd5c7dbecbdef60c5134a5a2 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index d4eae31a51a82e8b42b9df096599c6ce957c8981..667607e23cf554e7598006d8f0d19268afe6c11d 100644 (file)
--- a/client.h
+++ b/client.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 593cb2c044c37995d76fa58f4abcb0a6ab198668..a7115fd75ac33495d9dd36862ff446757bd9666c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -170,7 +170,7 @@ static void client_post_select(struct sched *s, struct task *t)
                        return;
                ret = send_buffer(ct->rc4c.fd, buf);
                if (ret < 0)
-                       goto err;
+                       goto out;
                ct->status = CL_SENT_AUTH;
                return;
        case CL_SENT_AUTH:
@@ -191,7 +191,7 @@ static void client_post_select(struct sched *s, struct task *t)
                ret = para_decrypt_buffer(ct->key_file, crypt_buf,
                        (unsigned char *)buf, n);
                if (ret < 0)
-                       goto err;
+                       goto out;
                sha1_hash((char *)crypt_buf, CHALLENGE_SIZE, challenge_sha1);
                RC4_set_key(&ct->rc4c.send_key, RC4_KEY_LEN,
                        crypt_buf + CHALLENGE_SIZE);
@@ -202,7 +202,7 @@ static void client_post_select(struct sched *s, struct task *t)
                ret = send_bin_buffer(ct->rc4c.fd, (char *)challenge_sha1,
                        HASH_SIZE);
                if (ret < 0)
-                       goto err;
+                       goto out;
                ct->status = CL_SENT_CH_RESPONSE;
                return;
                }
@@ -237,7 +237,7 @@ static void client_post_select(struct sched *s, struct task *t)
                ret = rc4_send_buffer(&ct->rc4c, command);
                free(command);
                if (ret < 0)
-                       goto err;
+                       goto out;
                ct->status = CL_SENT_COMMAND;
                return;
                }
@@ -265,7 +265,7 @@ static void client_post_select(struct sched *s, struct task *t)
                size_t sz;
                ret = btr_node_status(btrn, 0, BTR_NT_LEAF);
                if (ret < 0)
-                       goto err;
+                       goto out;
                if (ret == 0)
                        return;
                if (!FD_ISSET(ct->rc4c.fd, &s->wfds))
@@ -273,7 +273,7 @@ static void client_post_select(struct sched *s, struct task *t)
                sz = btr_next_buffer(btrn, &buf2);
                ret = rc4_send_bin_buffer(&ct->rc4c, buf2, sz);
                if (ret < 0)
-                       goto err;
+                       goto out;
                btr_consume(btrn, sz);
                return;
                }
@@ -282,7 +282,7 @@ static void client_post_select(struct sched *s, struct task *t)
                char *buf2;
                ret = btr_node_status(btrn, 0, BTR_NT_ROOT);
                if (ret < 0)
-                       goto err;
+                       goto out;
                if (ret == 0)
                        return;
                /*
@@ -301,7 +301,6 @@ static void client_post_select(struct sched *s, struct task *t)
                goto out;
                }
        }
-err:
 out:
        t->error = ret;
        if (ret < 0) {
index ac204e37db48d3647914bb96ccf68d8a87834d0b..92517134e237697b49e6956d352b906a7e4f9d57 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 664d25734aa14e877735c891f172600982ad2939..57e851f938c700044be20b62226dc07fae63c07e 100644 (file)
--- a/command.c
+++ b/command.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index eee37518fd3ef0c5b52f3a4e116ff1767d360db3..d0816df44198ae11d1f3b076b262ab16b51e255b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/crypt.c b/crypt.c
index b6a54604f167babf9c05712658233d713c229be0..917948c6185710fb828b441025b8d46a0fdc2924 100644 (file)
--- a/crypt.c
+++ b/crypt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/crypt.h b/crypt.h
index 8357b6d788d77ab0f6aa49db588e04d5d26390c7..6bd8179bbe90b8162bcc7d3a9af5736cd21d2677 100644 (file)
--- a/crypt.h
+++ b/crypt.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index eef504f1b972f20b9a8b5aa22d0efc0ae80f1396..a67e9e2b45b43e8abcbe3b5d8a62da3dcb516ffa 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 2ab9fcab0c16bea881d4a4f6fc2f099b27ef3037..41c2ee1a690a82ebee2623c3f79efe21b8e364e2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 38e4b7c822e20a209c278a219e28b3121578a305..304a42e749a647d5d6a568ae0e9850d183907979 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/error.h b/error.h
index 9864b1d98b3859f753b747d1f49080af41af633b..3dfee0dda071d56462fc2ab93d81390bc6002c3c 100644 (file)
--- a/error.h
+++ b/error.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/exec.c b/exec.c
index db05c0227f0ce91953e42be6eb562aeb2a33af1e..b11b217b963fd2359622d5f56688c7f51e80b766 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2003-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/fade.c b/fade.c
index d9f93ccf6c9f0f0452c748e2db0fbe67cfda200a..8eeb79e7d3f335b08ed1d2b8f3606e2fdec4cd6d 100644 (file)
--- a/fade.c
+++ b/fade.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1998-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1998-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/fd.c b/fd.c
index 978ada45de9211dc84363874682603d0d6d6e558..a0969e3e651a92983682f29f1ca375b214a6447a 100644 (file)
--- a/fd.c
+++ b/fd.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -97,7 +97,7 @@ int write_nonblock(int fd, const char *buf, size_t len)
  * In any case, \a num_bytes contains the number of bytes that have been
  * successfully read from \a fd (zero if the first readv() call failed with
  * EAGAIN). Note that even if the function returns negative, some data might
- * have been read before the error occured. In this case \a num_bytes is
+ * have been read before the error occurred. In this case \a num_bytes is
  * positive.
  *
  * \sa \ref write_nonblock(), read(2), readv(2).
diff --git a/fd.h b/fd.h
index 00b02bef7a0e52819b2e4da35f7b79fc16145d93..436622f0ef994791abe9d1e3f3cd3adacb08d92a 100644 (file)
--- a/fd.h
+++ b/fd.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 30696c10f4d0f74d86f15fde206a6f976f41d715..4f3ba950d985b3548dfc926402bbaae5e1ad2434 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -414,7 +414,7 @@ static int dispatch_slice(char *buf, size_t len, struct fec_header *h,
        ret = fec_new(k, n, &pfd->fec);
        if (ret < 0)
                return ret;
-       pfd->btrp = btr_pool_new("fecdec", 20 * k *  h->slice_bytes);
+       pfd->btrp = btr_pool_new("fecdec", 64 * 1024);
        /* decode and clear the first group */
        ret = decode_group(pfd->first_complete_group, fn);
        if (ret < 0)
index 0cee535aa92ff9b5aaba1b815c8e8c95e0dd4731..8cafbb687b8498ff6b9db43a1129676363b3db20 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -50,19 +50,17 @@ __must_check __malloc static char *random_filename(void)
        return result;
 }
 
-static int file_write_open(struct writer_node *wn)
+static int prepare_output_file(struct writer_node *wn)
 {
-       struct private_file_write_data *pfwd = para_calloc(
-               sizeof(struct private_file_write_data));
        struct file_write_args_info *conf = wn->conf;
        char *filename;
        int ret;
+       struct private_file_write_data *pfwd = para_calloc(sizeof(*pfwd));
 
        if (conf->filename_given)
                filename = conf->filename_arg;
        else
                filename = random_filename();
-       wn->private_data = pfwd;
        ret = para_open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
        if (!conf->filename_given)
                free(filename);
@@ -70,8 +68,11 @@ static int file_write_open(struct writer_node *wn)
                goto out;
        pfwd->fd = ret;
        ret = mark_fd_blocking(pfwd->fd);
-       if (ret >= 0)
-               return 1;
+       if (ret < 0)
+               goto out_close;
+       wn->private_data = pfwd;
+       return 1;
+out_close:
        close(pfwd->fd);
 out:
        free(pfwd);
@@ -82,20 +83,21 @@ static void file_write_pre_select(struct sched *s, struct task *t)
 {
        struct writer_node *wn = container_of(t, struct writer_node, task);
        struct private_file_write_data *pfwd = wn->private_data;
-       int ret;
+       int ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
 
-       t->error = 0;
-       ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
-       if (ret > 0)
-               para_fd_set(pfwd->fd, &s->wfds, &s->max_fileno);
-       else if (ret < 0)
-               sched_min_delay(s);
+       if (ret == 0)
+               return;
+       if (ret < 0 || !pfwd)
+               return sched_min_delay(s);
+       para_fd_set(pfwd->fd, &s->wfds, &s->max_fileno);
 }
 
 static void file_write_close(struct writer_node *wn)
 {
        struct private_file_write_data *pfwd = wn->private_data;
 
+       if (!pfwd)
+               return;
        close(pfwd->fd);
        free(pfwd);
 }
@@ -114,6 +116,10 @@ static void file_write_post_select(__a_unused struct sched *s,
        ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
        if (ret <= 0)
                goto out;
+       if (!pfwd) {
+               ret = prepare_output_file(wn);
+               goto out;
+       }
        if (!FD_ISSET(pfwd->fd, &s->wfds))
                return;
        bytes = btr_next_buffer(btrn, &buf);
@@ -129,17 +135,13 @@ out:
        t->error = ret;
 }
 
-__malloc static void *file_write_parse_config(const char *options)
+__malloc static void *file_write_parse_config_or_die(const char *options)
 {
-       struct file_write_args_info *conf
-               = para_calloc(sizeof(struct file_write_args_info));
-       int ret = file_cmdline_parser_string(options, conf, "file_write");
-
-       PARA_INFO_LOG("conf->filename_given: %d\n", conf->filename_given);
-       if (!ret)
-               return conf;
-       free(conf);
-       return NULL;
+       struct file_write_args_info *conf = para_calloc(sizeof(*conf));
+
+       /* exits on errors */
+       file_cmdline_parser_string(options, conf, "file_write");
+       return conf;
 }
 
 static void file_write_free_config(void *conf)
@@ -153,10 +155,9 @@ void file_write_init(struct writer *w)
        struct file_write_args_info dummy;
 
        file_cmdline_parser_init(&dummy);
-       w->open = file_write_open;
        w->pre_select = file_write_pre_select;
        w->post_select = file_write_post_select;
-       w->parse_config = file_write_parse_config;
+       w->parse_config_or_die = file_write_parse_config_or_die;
        w->free_config = file_write_free_config;
        w->close = file_write_close;
        w->shutdown = NULL; /* nothing to do */
index 7726e35f94df5823c2f4cea9ed5ac2e679a9a3e7..1d938c45ac059a92ac59ac364be5abc73ebc2a13 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 692020c40ca80fcd7dd008d59095d7df469d9399..0808059dac3f7450aaa73c27d6afd4d382c62e94 100644 (file)
--- a/filter.h
+++ b/filter.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index cdd9f39855c8add2f5c4f4bdfdd88c65bbe72651..269c4d6d5fb516402d756906bdb57fc5c2be2275 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/ggo.c b/ggo.c
index a25c0809fb5453ce7e30b739a32d641748b5903d..a9bc4c367c9af091939af1ed4e02072b71268c2a 100644 (file)
--- a/ggo.c
+++ b/ggo.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2008-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/ggo.h b/ggo.h
index cc0c96b3d8135163089945a85be9c1d26980df3c..88db8761cab4f048178df3327b99faa6d1c57977 100644 (file)
--- a/ggo.h
+++ b/ggo.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2008-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index b61981f2f1cd05e9f4e78e0564bae3240d878180..8e6715036769dace2f633d867d4bdb436901b6e0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 75ba4c9183c58ab40ef910650136f2ebc38bad47..88b954837f93f67e5965c4829e0fcb4d0e9856d0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/gui.c b/gui.c
index 865ed658afc4197f4ba29ce5344be38fcbd48bad..8e70dd93b4d3a5d3d7b35a3c7ec65723d7639f24 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1998-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1998-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/gui.h b/gui.h
index 65342a4ddb17448774fe36be44b1465b024054a3..f8c6712b4d6870003cac507ed429dec47abdeca7 100644 (file)
--- a/gui.h
+++ b/gui.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 647eb66f97b2801e607c6fca2b420ab406a11fcd..ffb47d43302773f838f1fc6d0e6ca4958b2e871b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/hash.h b/hash.h
index be18a92a163e7f3602fdb652a35652a308cf31bc..6dfddbed69e2985b0147fe9b63d727c48cce320d 100644 (file)
--- a/hash.h
+++ b/hash.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 9ade8dfbc4063d2f9179c190c2e8233bf22c56ae..53ef8e60d03f6d7afc4d5b9d7e3b7a2e71c97deb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -49,7 +49,7 @@ struct private_http_recv_data {
         * The file descriptor used for receiving the http stream.
         *
         * The pre_select function of the http receiver adds this file descriptor to
-        * the set of file decriptors which are checked for reading/writing (depending
+        * the set of file descriptors which are checked for reading/writing (depending
         * on the current status) by the select loop of the application (para_audiod or
         * para_recv).
         *
index d5c6397e4a52eb096f9ebc13cb364d38b7b47455..086b600f0d043f928e6c2c0f71afa65104045f00 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/ipc.c b/ipc.c
index 6a0f00b5a2373b0d04df8527ce4d4f3daa933a7d..c1069ad9af067a026c794663be96518351eec8ee 100644 (file)
--- a/ipc.c
+++ b/ipc.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/mm.c b/mm.c
index 57121a1c0a93a38e56b8fddcf530b61201a8f2e4..a9f4b9bd258f8f9e36733ea0fe295086ea0b3a49 100644 (file)
--- a/mm.c
+++ b/mm.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/mm.h b/mm.h
index 55af744f88999cd1ab05731e8a313ee7ba60fd55..ebc968d3ea5d2fcdefe7025ecef3bef452559e28 100644 (file)
--- a/mm.h
+++ b/mm.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/mood.c b/mood.c
index 89ad80d956af3b7107f7ae4883619e689d3d2582..732df0a32f8d1e7d19d08f04c773dc5026589caf 100644 (file)
--- a/mood.c
+++ b/mood.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/mood.h b/mood.h
index 5ef01489dd8bba3128cf5b5967bcf43d27cd92b2..e9f08111755b02ab559d1b590753b2ba6c4340d9 100644 (file)
--- a/mood.h
+++ b/mood.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 980649c85e826cd136cc75321d5b0c731d938dd9..b83343edcf505b69a9cd6e79fbca43e9fb2ce384 100644 (file)
--- a/mp3_afh.c
+++ b/mp3_afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2003-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index c2c15a3aeacd1e2b9b6d613efacd99345f30eb61..82f014189d3ccb8ece45652ec17fa80c9a3ee6b6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/net.c b/net.c
index fa48e54f3f8525f26c716ef88784739ecd82a1fb..2369dc8ce99027a4bb122a9a9d3e71bb5aa10f8b 100644 (file)
--- a/net.c
+++ b/net.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/net.h b/net.h
index 75389aecda5d7a5101771f526d74887f34177513..a1af08ae94ea521cc856c2a1c40b4873ab148163 100644 (file)
--- a/net.h
+++ b/net.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 744a1331c7e794bb0300e59bce950f50cbffe47a..ef42c497062c228ddab10497c3388ffa2b8de90b 100644 (file)
--- a/ogg_afh.c
+++ b/ogg_afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2004-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 54e92956c641eb8cc8d88ce2a2f9c8920b32a6d6..1deb5cdae194b1bf5b026ffd719d2f316fcba086 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2004-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -163,7 +163,7 @@ int ogg_get_file_info(char *map, size_t numbytes, struct afh_info *afhi,
        afhi->chunk_table[1] = afhi->header_len;
        oss.returned = afhi->header_len;
        oss.fill = numbytes;
-       for (i = 0, j = 1; ogg_sync_pageseek(&oss, &op) > 0; i++) {
+       for (j = 1; ogg_sync_pageseek(&oss, &op) > 0; /* nothing */) {
                int granule = ogg_page_granulepos(&op);
 
                while (granule > j * frames_per_chunk) {
index c7eb167e8838bf3c9aa15f7984ea7395d35c00cf..01f8d6c532fb93a37231286ed66da7cf09eb5530 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2010-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 68b4db160662b5952136b015b33b17d8419f4907..1bc6d2f748e8cbe7c3067e3479e91ef771fb7667 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index b82b3968baf214f3889cca805306438073e21ac6..df9608a8c6a2bbb9b3787df76ce8ec7931604e16 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -52,19 +52,20 @@ static void oss_pre_select(struct sched *s, struct task *t)
        struct private_oss_write_data *powd = wn->private_data;
        int ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
 
-       t->error = 0;
-       if (ret < 0)
-               sched_min_delay(s);
-       else if (ret > 0)
-               para_fd_set(powd->fd, &s->wfds, &s->max_fileno);
+       if (ret == 0)
+               return;
+       if (ret < 0 || !powd)
+               return sched_min_delay(s);
+       para_fd_set(powd->fd, &s->wfds, &s->max_fileno);
 }
 
 static void oss_close(struct writer_node *wn)
 {
        struct private_oss_write_data *powd = wn->private_data;
 
-       if (powd->fd >= 0)
-               close(powd->fd);
+       if (!powd)
+               return;
+       close(powd->fd);
        free(powd);
 }
 
@@ -85,12 +86,13 @@ static int oss_init(struct writer_node *wn, unsigned sample_rate,
        int ret, format;
        unsigned ch, rate;
        struct oss_write_args_info *conf = wn->conf;
-       struct private_oss_write_data *powd = wn->private_data;
+       struct private_oss_write_data *powd = para_calloc(sizeof(*powd));
 
+       wn->private_data = powd;
        PARA_INFO_LOG("opening %s\n", conf->device_arg);
        ret = para_open(conf->device_arg, O_WRONLY, 0);
        if (ret < 0)
-               return ret;
+               goto err_free;
        powd->fd = ret;
        ret = mark_fd_nonblocking(powd->fd);
        if (ret < 0)
@@ -150,7 +152,8 @@ static int oss_init(struct writer_node *wn, unsigned sample_rate,
        return 1;
 err:
        close(powd->fd);
-       powd->fd = -1;
+err_free:
+       free(powd);
        return ret;
 }
 
@@ -168,7 +171,7 @@ static void oss_post_select(__a_unused struct sched *s,
                goto out;
        if (ret == 0)
                return;
-       if (powd->fd < 0) {
+       if (!powd) {
                int32_t rate, ch, format;
                get_btr_sample_rate(btrn, &rate);
                get_btr_channels(btrn, &ch);
@@ -199,28 +202,13 @@ out:
                btr_remove_node(btrn);
 }
 
-static int oss_open(struct writer_node *wn)
-{
-       struct private_oss_write_data *powd;
-
-       powd = para_calloc(sizeof(*powd));
-       wn->private_data = powd;
-       powd->fd = -1;
-       return 1;
-}
-
-__malloc static void *oss_parse_config(const char *options)
+__malloc static void *oss_parse_config_or_die(const char *options)
 {
-       int ret;
        struct oss_write_args_info *conf = para_calloc(sizeof(*conf));
 
-       ret = oss_cmdline_parser_string(options, conf, "oss_write");
-       if (ret)
-               goto err_out;
+       /* exits on errors */
+       oss_cmdline_parser_string(options, conf, "oss_write");
        return conf;
-err_out:
-       free(conf);
-       return NULL;
 }
 
 static void oss_free_config(void *conf)
@@ -240,11 +228,10 @@ void oss_write_init(struct writer *w)
        struct oss_write_args_info dummy;
 
        oss_cmdline_parser_init(&dummy);
-       w->open = oss_open;
        w->close = oss_close;
        w->pre_select = oss_pre_select;
        w->post_select = oss_post_select;
-       w->parse_config = oss_parse_config;
+       w->parse_config_or_die = oss_parse_config_or_die;
        w->free_config = oss_free_config;
        w->shutdown = NULL;
        w->help = (struct ggo_help) {
index cfd02e7453b1ccac04eb951e5f42009801806b55..f27a49b0f1183947763c6bae1ac31b2af1b92e3a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -187,18 +187,9 @@ static OSStatus osx_callback(void * inClientData,
 #define ENDIAN_FLAGS 0
 #endif
 
-static int osx_write_open(struct writer_node *wn)
-{
-       struct private_osx_write_data *powd = para_calloc(sizeof(*powd));
-
-       wn->private_data = powd;
-       init_buffers(wn);
-       return 0;
-}
-
 static int core_audio_init(struct writer_node *wn)
 {
-       struct private_osx_write_data *powd = wn->private_data;
+       struct private_osx_write_data *powd = para_calloc(sizeof(*powd));
        ComponentDescription desc;
        Component comp;
        AURenderCallbackStruct inputCallback = {osx_callback, powd};
@@ -207,6 +198,8 @@ static int core_audio_init(struct writer_node *wn)
        struct btr_node *btrn = wn->btrn;
        int32_t val;
 
+       wn->private_data = powd;
+       init_buffers(wn);
        /* where did that default audio output go? */
        desc.componentType = kAudioUnitType_Output;
        desc.componentSubType = kAudioUnitSubType_DefaultOutput;
@@ -276,22 +269,18 @@ e2:
 e1:
        CloseComponent(powd->audio_unit);
 e0:
+       free(powd);
+       wn->private_data = NULL;
        return ret;
 }
 
-__malloc static void *osx_write_parse_config(const char *options)
+__malloc static void *osx_write_parse_config_or_die(const char *options)
 {
-       struct osx_write_args_info *conf
-               = para_calloc(sizeof(struct osx_write_args_info));
-       PARA_INFO_LOG("options: %s\n", options);
-       int ret = osx_cmdline_parser_string(options, conf, "osx_write");
-       if (ret)
-               goto err_out;
-       return conf;
-err_out:
-       free(conf);
-       return NULL;
+       struct osx_write_args_info *conf = para_calloc(sizeof(*conf));
 
+       /* exits on errors */
+       osx_cmdline_parser_string(options, conf, "osx_write");
+       return conf;
 }
 
 static void osx_free_config(void *conf)
@@ -303,6 +292,8 @@ static void osx_write_close(struct writer_node *wn)
 {
        struct private_osx_write_data *powd = wn->private_data;
 
+       if (!powd)
+               return;
        PARA_INFO_LOG("closing writer node %p\n", wn);
        AudioOutputUnitStop(powd->audio_unit);
        AudioUnitUninitialize(powd->audio_unit);
@@ -320,14 +311,15 @@ static void osx_write_post_select(__a_unused struct sched *s, struct task *t)
        size_t bytes;
        int ret = 0;
 
-       while (powd->to->remaining <= 0) {
+       while (!powd || powd->to->remaining <= 0) {
                ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
                if (ret <= 0)
                        break;
-               if (powd->sample_rate == 0) {
+               if (!powd) {
                        ret = core_audio_init(wn);
                        if (ret < 0)
                                break;
+                       powd = wn->private_data;
                }
                btr_merge(btrn, 8192);
                bytes = btr_next_buffer(btrn, &data);
@@ -342,7 +334,7 @@ static void osx_write_post_select(__a_unused struct sched *s, struct task *t)
                }
                powd->to = powd->to->next;
        }
-       if (ret < 0 && powd->from->remaining <= 0) {
+       if (ret < 0 && (!powd || powd->from->remaining <= 0)) {
                btr_remove_node(btrn);
                t->error = ret;
        }
@@ -353,17 +345,19 @@ static void osx_write_pre_select(struct sched *s, struct task *t)
        struct writer_node *wn = container_of(t, struct writer_node, task);
        struct private_osx_write_data *powd = wn->private_data;
        struct timeval tmp = {.tv_sec = 1, .tv_usec = 0}, delay = tmp;
-       unsigned long divisor;
-       size_t numbytes = powd->to->remaining * sizeof(short);
+       unsigned long factor;
+       size_t numbytes;
        int ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
 
-       if (ret < 0)
-               sched_min_delay(s);
-       if (ret <= 0 || numbytes < wn->min_iqs)
+       if (ret == 0)
                return;
-       divisor = powd->sample_rate * wn->min_iqs / numbytes;
-       if (divisor)
-               tv_divide(divisor, &tmp, &delay);
+       if (ret < 0 || !powd)
+               return sched_min_delay(s);
+       assert(powd->sample_rate > 0);
+       assert(wn->min_iqs > 0);
+       numbytes = powd->to->remaining * sizeof(short);
+       factor = numbytes / powd->sample_rate / wn->min_iqs;
+       tv_scale(factor, &tmp, &delay);
        sched_request_timeout(&delay, s);
 }
 
@@ -373,11 +367,10 @@ void osx_write_init(struct writer *w)
        struct osx_write_args_info dummy;
 
        osx_cmdline_parser_init(&dummy);
-       w->open = osx_write_open;
        w->close = osx_write_close;
        w->pre_select = osx_write_pre_select;
        w->post_select = osx_write_post_select;
-       w->parse_config = osx_write_parse_config;
+       w->parse_config_or_die = osx_write_parse_config_or_die;
        w->free_config = osx_free_config;
        w->shutdown = NULL; /* nothing to do */
        w->help = (struct ggo_help) {
diff --git a/para.h b/para.h
index 305707da8d5194856fe34c520428dd8410843997..df7d755f20072c9a21066fbedfc1b492bdb58de8 100644 (file)
--- a/para.h
+++ b/para.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -50,7 +50,7 @@
        _x > 0? _x : -_x; })
 
 /**
- * define a standard log function that always writes to stderr
+ * Define a standard log function that always writes to stderr.
  *
  * \param loglevel_barrier If the loglevel of the current message
  * is less than that, the message is going to be ignored.
        "Written by Andre Noll.\n" \
        "Report bugs to <maan@systemlinux.org>.\n"
 
-/** print out \p VERSION_TEXT and exit if version flag was given */
+/** Print out \p VERSION_TEXT and exit if version flag was given. */
 #define HANDLE_VERSION_FLAG(_prefix, _args_info_struct) \
        if (_args_info_struct.version_given) { \
                printf("%s", VERSION_TEXT(_prefix)); \
                exit(EXIT_SUCCESS); \
        }
 
-/* Sent by para_client to initiate the authentication procedure. */
+/** Sent by para_client to initiate the authentication procedure. */
 #define AUTH_REQUEST_MSG "auth rsa "
-/** sent by para_server for commands that expect a data file */
+/** Sent by para_server for commands that expect a data file. */
 #define AWAITING_DATA_MSG "\nAwaiting Data."
-/** sent by para_server if authentication was successful */
+/** Sent by para_server if authentication was successful. */
 #define PROCEED_MSG "Proceed."
-/** length of the \p PROCEED_MSG string */
+/** Length of the \p PROCEED_MSG string. */
 #define PROCEED_MSG_LEN strlen(PROCEED_MSG)
-/** sent by para_client to indicate the end of the command line */
+/** Sent by para_client to indicate the end of the command line. */
 #define EOC_MSG "\nEnd of Command."
 
 /* exec */
@@ -165,6 +165,7 @@ _static_inline_ long int para_random(unsigned max)
        return ((max + 0.0) * (random() / (RAND_MAX + 1.0)));
 }
 
+/** Divide and round up to next integer. */
 #define DIV_ROUND_UP(x, y) ({ \
        typeof(y) _divisor = y; \
        ((x) + _divisor - 1) / _divisor; })
index b04598b844043cc96fa01b8aa834030ee9d7697e..2d2f23b4eb9c6df6b2d9ff9157a9716f09c1fcc6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 2353c6106e1073174f487177e23877e44b72f5af..e766d7bc5252b5e481176cd22c701d826fb677bd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 548a8177a544d183c9cd49bc2ae2bc81f8ea7db2..e1b0390c8a0f1c7a76b1f1c4fd26b1d1ae106b4a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/recv.c b/recv.c
index 99efefb7eb8c6e8d2da64d856fec908b812d2b32..a737e4cbde81760cc2bf2014bd72b56b07210a60 100644 (file)
--- a/recv.c
+++ b/recv.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/recv.h b/recv.h
index 271932b183a3101f147273332d4e592c49bd09d7..05c5ed7615729219990859d2f953f85b96437c0a 100644 (file)
--- a/recv.h
+++ b/recv.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 6517948d4cd9d1638eed2e50271e46fbce73a62b..3fe2a139e0b6a6b270dce5e548e18d76d63ae1aa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 1f0b4e469c6abdf73920595246f91664031d76a3..bf990b06c6a26256fb16a59422a8b348312f7b96 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 7ddfb1c0a6fd62272d7e68c5babfeccbec9569df..67f9f3a85bcd2966cc869adfa612dec48d633ab6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/sched.c b/sched.c
index 6da5fa23c1bfffe02ace0f6277ccf448e8e5b632..b0e9ce12f221e901d761108899d98190ccf984d6 100644 (file)
--- a/sched.c
+++ b/sched.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/sched.h b/sched.h
index 1da5a220aa8b5f52c2b31685a985cf58997a5e4a..7158a8732c314b88ad1e162cbb6743c710d01240 100644 (file)
--- a/sched.h
+++ b/sched.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/score.c b/score.c
index 6b9d05b5d851ffa3e69d824447bba29884f990f1..27fec711047f230c96215be2d90def9db3320bbe 100644 (file)
--- a/score.c
+++ b/score.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/send.h b/send.h
index 52f7a10d11f1699c41b2e81cb0d5e5f278459414..836babd50845088be08a2061fe39cc6ffd7760cb 100644 (file)
--- a/send.h
+++ b/send.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 33c56e7ab135b50a4c77242cb3534ec67d5d9608..6a85644d734d6c2f7fd748edf688c6cc21b18651 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 11397d029f8fbff5413ed504ffb758a906eb69b4..efff208b1bd704a1e5bf64aee32491b514b5b14e 100644 (file)
--- a/server.c
+++ b/server.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 43ba841d28681fc06b92c06d7ccfce95a3a6423f..3b2f381c9512e7c4455f5887f0bda56b53d21cec 100644 (file)
--- a/server.h
+++ b/server.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/sha1.c b/sha1.c
index 70731ec25e85502b7246d9f777cd87aa390fce18..b0e955ec9a3e10aec90a71467c05615b69aa3233 100644 (file)
--- a/sha1.c
+++ b/sha1.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 0b4b6f0b847171e3c68311c4075c2d26f017a5b3..4726571c40da9a166fcef51655b2d20d87fd59b0 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2004-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 1dbfc98193fba8ba067314ef4abc0e0453f39df5..799c317fd6114046334c8577fabbe767e20eea94 100644 (file)
--- a/signal.h
+++ b/signal.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/spx.h b/spx.h
index 6ffa80eb17342841295d213ce6b193960160449b..124d68349b4854c7653969298507e3726be9e2f6 100644 (file)
--- a/spx.h
+++ b/spx.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2010-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 472c2c80fc38f013200c84a885aa3afd2ec780d9..6414f4c4ebba4fda67b7d64a32d570b50ba0436d 100644 (file)
--- a/spx_afh.c
+++ b/spx_afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2010-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index ce01e23abd2c90aca37819148b735a4a26d14e2b..f9f1eb7e0958465d02e5f7bccbb6fa50eb10c379 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2002-2006 Jean-Marc Valin
- * Copyright (C) 2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2010-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index da2d5da6961578f30decd2a80a40d6e677bc79ba..41b66c519f9509d3837355854be95e8760f79648 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2002-2006 Jean-Marc Valin
- * Copyright (C) 2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2010-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/stat.c b/stat.c
index b9d8e3b9e3afc763beca585683e147effaaf334f..b125529ae8f1788ee3c6dfa62f2ac3883ffd0342 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/stdin.c b/stdin.c
index ca5eb0e19e56e604a59e9840231547edddf1d730..e625f3726789972386de10c8af86d68b206e82c4 100644 (file)
--- a/stdin.c
+++ b/stdin.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/stdin.h b/stdin.h
index a1983dd582af33dc546bdadba953b19e66fe9af6..2d279a6eada30d55efe51fce50798fdaf4700239 100644 (file)
--- a/stdin.h
+++ b/stdin.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 775f0649875278935b9da1df065d4307f292bbf6..5604fced075f5c2b24b8df622c6e0ad5c3a320dc 100644 (file)
--- a/stdout.c
+++ b/stdout.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 3783796c075a2478efc916b9c6466ba1d66054cf..1e35d6ca14238a7cee97bdd91889c1f2b186f654 100644 (file)
--- a/stdout.h
+++ b/stdout.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index c228c24c4f27eee753349e361afd1d70708aa2b4..813999bbf1ced122ea8aa1347929ee03ce045c77 100644 (file)
--- a/string.c
+++ b/string.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2004-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 7b5887e10dea572c1f7650ccc535edff48a65688..06f4d3e6ca88646fbe531b42af49089be23680ba 100644 (file)
--- a/string.h
+++ b/string.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/time.c b/time.c
index 8faefc059c950c5a5889b37b14ea6e8b61072af8..19bf469cd261bcd3dde93438a312ac5a685dbdd5 100644 (file)
--- a/time.c
+++ b/time.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index f008f1eda30a96818d80fdbf01783186f036e341..e276343ea1aae1b2a750389c4c691170b9c3aa6e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 7d4f1c79939210cb2acf7d74108b3fe34bcac347..4fb10b444be321c51e7d33da2442fd6b8a469138 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -31,7 +31,6 @@
 #include "fd.h"
 #include "sched.h"
 #include "close_on_fork.h"
-#include "chunk_queue.h"
 
 /**
  * Time window during which ICMP Destination/Port Unreachable messages are
@@ -44,8 +43,6 @@
 struct udp_target {
        /** Track time (seconds) of last ICMP Port Unreachable error */
        time_t last_unreachable;
-       /** Common sender client data */
-       struct sender_client *sc;
        /** The opaque structure returned by vss_add_fec_client(). */
        struct fec_client *fc;
        /** The FEC parameters for this target. */
@@ -57,11 +54,11 @@ static int sender_status;
 
 static void udp_close_target(struct sender_client *sc)
 {
-       if (sc->cq != NULL) {
-               del_close_on_fork_list(sc->fd);
-               cq_destroy(sc->cq);
-               sc->cq = NULL;
-       }
+       const char *buf;
+       size_t len = vss_get_fec_eof_packet(&buf);
+
+       /* ignore return value, closing the target anyway. */
+       (void)write(sc->fd, buf, len);
 }
 
 static void udp_delete_target(struct sender_client *sc, const char *msg)
@@ -70,6 +67,8 @@ static void udp_delete_target(struct sender_client *sc, const char *msg)
 
        PARA_NOTICE_LOG("deleting %s (%s) from list\n", sc->name, msg);
        udp_close_target(sc);
+       close(sc->fd);
+       del_close_on_fork_list(sc->fd);
        vss_del_fec_client(ut->fc);
        list_del(&sc->node);
        free(sc->name);
@@ -153,30 +152,16 @@ err:
        return -ERRNO_TO_PARA_ERROR(errno);
 }
 
-/** The maximal size of the per-target chunk queue. */
-#define UDP_CQ_BYTES 40000
-
 static void udp_init_session(struct sender_client *sc)
 {
-       if (sc->cq == NULL) {
-               sc->cq = cq_new(UDP_CQ_BYTES);
-               add_close_on_fork_list(sc->fd);
-               PARA_NOTICE_LOG("sending to udp %s\n", sc->name);
-       }
+       PARA_NOTICE_LOG("sending to udp %s\n", sc->name);
 }
 
 static void udp_shutdown_targets(void)
 {
        struct sender_client *sc, *tmp;
-       const char *buf;
-       size_t len = vss_get_fec_eof_packet(&buf);
-
        list_for_each_entry_safe(sc, tmp, &targets, node)
-               if (sc->cq != NULL) {
-                       /* ignore return value, closing the target anyway. */
-                       (void)write(sc->fd, buf, len);
-                       udp_close_target(sc);
-               }
+               udp_close_target(sc);
 }
 
 static int udp_resolve_target(const char *url, struct sender_command_data *scd)
@@ -295,19 +280,11 @@ static int udp_send_fec(struct sender_client *sc, char *buf, size_t len)
 
        if (sender_status == SENDER_OFF)
                return 0;
-       if (len == 0 && !cq_peek(sc->cq))
+       if (len == 0)
                return 0;
        ret = udp_check_socket_state(sc);
        if (ret < 0)
                goto fail;
-       ret = send_queued_chunks(sc->fd, sc->cq);
-       if (ret < 0)
-               goto fail;
-       if (!ret) { /* still data left in the queue */
-               ret = cq_force_enqueue(sc->cq, buf, len);
-               assert(ret >= 0);
-               return 0;
-       }
        ret = write_nonblock(sc->fd, buf, len);
        if (ret == -ERRNO_TO_PARA_ERROR(ECONNREFUSED)) {
                /*
@@ -318,10 +295,6 @@ static int udp_send_fec(struct sender_client *sc, char *buf, size_t len)
        }
        if (ret < 0)
                goto fail;
-       if (ret != len) {
-               ret = cq_force_enqueue(sc->cq, buf + ret, len - ret);
-               assert(ret >= 0);
-       }
        return 1;
 fail:
        udp_delete_target(sc, para_strerror(-ret));
@@ -340,7 +313,7 @@ static int udp_com_add(struct sender_command_data *scd)
                return -E_TARGET_EXISTS;
        }
        ut = para_calloc(sizeof(*ut));
-       sc = ut->sc = para_calloc(sizeof(*sc));
+       sc = para_calloc(sizeof(*sc));
        ut->fcp.slices_per_group      = scd->slices_per_group;
        ut->fcp.data_slices_per_group = scd->data_slices_per_group;
        ut->fcp.init_fec              = udp_init_fec;
@@ -364,6 +337,7 @@ static int udp_com_add(struct sender_command_data *scd)
        PARA_INFO_LOG("adding to target list (%s)\n", sc->name);
        ut->fc = vss_add_fec_client(sc, &ut->fcp);
        para_list_add(&sc->node, &targets);
+       add_close_on_fork_list(sc->fd);
        return 1;
 err:
        if (sc->fd >= 0)
index a1f1557c6fefb21d0586d6fb85c990c795dbb51a..fe1b946b1e96596ce6cd8c7949407bf7a341cfb6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 5d3b27fba38ba656d874b05e099881731cc49bfe..cce577a60331ae955a21a774f016d2dc032dc623 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/versions/paraslash-0.4.5.tar.bz2 b/versions/paraslash-0.4.5.tar.bz2
new file mode 100644 (file)
index 0000000..6299d0c
Binary files /dev/null and b/versions/paraslash-0.4.5.tar.bz2 differ
diff --git a/versions/paraslash-0.4.5.tar.bz2.asc b/versions/paraslash-0.4.5.tar.bz2.asc
new file mode 100644 (file)
index 0000000..c56b9b3
--- /dev/null
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.10 (GNU/Linux)
+
+iEYEABECAAYFAk0LimcACgkQWto1QDEAkw9cigCfQfJi6KJMC7HHGO7zrvlrz7f/
+4DoAn2hSNGm08WWIgqLYOjUGbQSCnNMc
+=/3KE
+-----END PGP SIGNATURE-----
diff --git a/vss.c b/vss.c
index 121373dc2f4fb77bb62985d20909b8ccefc972ae..916a71d518762f63675c65c195f87b6fdce089e1 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/vss.h b/vss.h
index c7e41b9d6159c8f93faae559e4a1e16645391554..bd798b0cfdaf454faee5816c3b16ffbed99e112b 100644 (file)
--- a/vss.h
+++ b/vss.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index b28b1d3c516d59ac3fbd4cea13bde8b5be492cb3..8408034d905c6f20eb375385d638de31a43df0e3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index d9c9f058addce684b27a95d5caae67fd12d174be..38572c940dac47cafcd170a64c04a21953dc74bf 100644 (file)
@@ -1,13 +1,4 @@
 <hr>
-<!--
-       Last modified:
-       <!--#flastmod virtual="" -->
-       <p>
-       <a href="http://validator.w3.org/check?uri=referer"><img border="0"
-         src="http://www.w3.org/Icons/valid-html401"
-         alt="Valid HTML 4.01!" height="31" width="88"></a>
-       </p>
--->
        </td>
        </table>
 </body>
index 663dea3102b8bc7149192e314a6b47e7ff29af68..48f5bb516a10265d559c862e8815e4c1eee42bef 100644 (file)
@@ -1,6 +1,10 @@
 <h1>Events</h1>
 <hr>
 <ul>
+       <li>2010-12-17: <a href="versions/paraslash-0.4.5.tar.bz2">paraslash-0.4.5</a>
+               <a href="versions/paraslash-0.4.5.tar.bz2.asc">(sig)</a>
+               "symmetric randomization"
+       </li>
        <li>2010-08-06: <a href="versions/paraslash-0.4.4.tar.bz2">paraslash-0.4.4</a>
                <a href="versions/paraslash-0.4.4.tar.bz2.asc">(sig)</a>
                "persistent regularity"
index d9a834836a5a9bc79458e1fc32619b13980bb538..9b7d85b3fd7d059c34476419841af8e9d3da42a1 100644 (file)
--- a/wma_afh.c
+++ b/wma_afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
index 0cb881e5de2eb851e5e0594d9fa18de17f100002..781db5f4a36678f14db97a165b02e8f41df3e8b8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/write.c b/write.c
index 424286b5a4c21613517d632777d3052578e869fd..dda1b705c19151000dd08098f99d2b9d4c71f11c 100644 (file)
--- a/write.c
+++ b/write.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
diff --git a/write.h b/write.h
index 1361fcf1d052b31596f1407a81cc485b5fa833e1..0044ae4f79d3cbde19d9d9dc5630bf048a6a6986 100644 (file)
--- a/write.h
+++ b/write.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -36,26 +36,20 @@ struct writer {
        /**
         * The command line parser of the writer.
         *
-        * It should check whether the command line options given by \a options are
-        * valid.  On success, it should return a pointer to the writer-specific
-        * configuration data determined by \a options.  Note that this might be called
-        * more than once with different values of \a options. \sa \ref free_config().
+        * It should check whether the command line options given by \a options
+        * are valid and return a pointer to the writer-specific configuration
+        * data determined by \a options. This function must either succeed or
+        * call exit(). Note that parse_config_or_die() might be called more
+        * than once with different values of \a options. \sa \ref
+        * free_config().
         */
-       void *(*parse_config)(const char *options);
+       void *(*parse_config_or_die)(const char *options);
        /**
         * Dellocate all configuration resources.
         *
-        * This should free whatever was allocated by \ref parse_config().
+        * This should free whatever was allocated by \ref parse_config_or_die().
         */
        void (*free_config)(void *config);
-       /**
-        * Open one instance of this writer.
-        *
-        * This function should perform any work necessary to write the incoming
-        * stream. To this aim, it may allocate its private data structure and store
-        * a pointer to that structure via the given writer_node parameter.
-        */
-       int (*open)(struct writer_node *);
        /**
         * Prepare the fd sets for select.
         *
index 93562d0d25781cf157d0c38ce5377bd8d99f2c2a..5988faf77a5cd13f1b4e1930299b8c90073efc3d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -66,27 +66,32 @@ void *check_writer_arg(const char *wa, int *writer_num)
                c = wa[len];
                if (c && c != ' ')
                        continue;
-               if (c && !writers[i].parse_config)
-                       return NULL;
                *writer_num = i;
-               return writers[i].parse_config(c? wa + len + 1 : "");
+               return writers[i].parse_config_or_die(c? wa + len + 1 : "");
        }
        PARA_ERROR_LOG("writer not found\n");
        return NULL;
 }
 
+/**
+ * Open a writer node and register the corresponding task.
+ *
+ * \param wn The writer node to open.
+ * \param parent The parent btr node (the source for the writer node).
+ *
+ * The configuration of the writer node stored in \p wn->conf must be
+ * initialized before this function may be called.
+ */
 void register_writer_node(struct writer_node *wn, struct btr_node *parent)
 {
        struct writer *w = writers + wn->writer_num;
        char *name = make_message("%s writer", writer_names[wn->writer_num]);
-       int ret;
 
        wn->btrn = btr_new_node(&(struct btr_node_description)
                EMBRACE(.name = name, .parent = parent,
                .handler = w->execute, .context = wn));
        strcpy(wn->task.status, name);
        free(name);
-       ret = w->open(wn);
        wn->task.post_select = w->post_select;
        wn->task.pre_select = w->pre_select;
        register_task(&wn->task);
@@ -115,7 +120,7 @@ int setup_writer_node(const char *arg, struct btr_node *parent,
                wn->conf = check_writer_arg(arg, &wn->writer_num);
        else {
                wn->writer_num = DEFAULT_WRITER;
-               wn->conf = writers[DEFAULT_WRITER].parse_config("");
+               wn->conf = writers[DEFAULT_WRITER].parse_config_or_die("");
        }
        if (!wn->conf)
                return -E_WRITE_COMMON_SYNTAX;
@@ -123,7 +128,6 @@ int setup_writer_node(const char *arg, struct btr_node *parent,
        return 1;
 }
 
-
 /**
  * Print the help text of all writers to stdout.
  *
@@ -153,7 +157,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);
index 331fa460c3c484da1244e9999d12300455fd017d..5f55120b25f85aca0f05b58000dc1889425193d5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */