Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Commits on Aug 2, 2015
  1. fixup chunked responses for short write case

    do what we do for flv, only adjust the buffer pos when all of it has been written, using
    the chunked pos as the intermediate position marker.
Commits on Aug 1, 2015
  1. avoid memory leak in yp at exit, typical of relays at shutdown

    minor issue, as the memory is only created at shutdown. we just prevent the
    new details being queued.
Commits on Jul 29, 2015
  1. add chunked and keep alive capabilities to connections.

    chunked response is now allowed but can be disabled via _hdr=8, but it also seems that
    some players may have trouble even if HTTP 1.1 is supplied but these tend to send the
    icy-metadata header so we also use that to disable chunked.
    keep-alive is only enabled for 1.1 connections and clients are reset and re-added back
    onto a worker for subsequent processing. A couple of the responses can be 1.1.  This
    should only really be a factor for web style requests as they tend to blast a series of
    requests to avoid the accept overhead.
Commits on Jul 27, 2015
  1. move the auto block scaler to validation routine, adjust the scale to…

    … account for a larger block default
Commits on Jul 23, 2015
Commits on Jul 13, 2015
Commits on Jul 11, 2015
  1. have the return code check on a mutex lock get verified in all cases.

    normally the code is 0 for the mutex lock case or it blocks, any other code should
    mean a significant problem that needs looking into and verifying.
  2. set a max send size default in cases of mp3/aac files, else it gets s…

    …tuck thinking nothing to send
Commits on Jul 10, 2015
  1. improve the range and HEAD handling.

    certain players like iphone issue range requests but react poorly if a 206 response code
    is returned.  To get around this we return a 200 response code (like we did until recently
    but also impose a very short termination trigger.   There is also a tie-in with handling
    requests using the HEAD method as thes are used to get information but not return content.
    A further issue with these short duration requests is how they react when auth is in use,
    which we allow to bypass the auth trigger but leave the flag disabled allowing the backend
    file and stream routines to detect and drop.
    The are a few changes here just because the discon time is made as a union to also allow
    for a end byte position.
Commits on Jul 8, 2015
Commits on Jul 6, 2015
Commits on Jul 5, 2015
  1. update to non-ogg speed and buffer size determination rules

    This makes the default queue block size slightly larger (setting settable with qblock-size)
    but allows the writer routines to have their own limit which is about 1400 by default. This
    reduces the internal admin overhead on large queues but still imposes a packet size limiter
    send to the listeners.  The only external difference is that instead of packets of N frames
    going to the listener, you will get something in the order of 1400 (near common MTU).  The
    setting that is new is max-send-size and is only required if you want a different write size
    to 1400, but you will only ever really get up to the qblock-size, which is another reason
    it was increased (currently about 2900).
    There were a couple of other issues identified which were fixed but are strickly speaking
    separate from the block sizing.  One is the period update of the full metadata, it did not
    actually break the spec but was caused by a state setting if an EAGAIN was returned at a
    specific point. I doubt that anyone noticed as it is rare and would not be seen generally.
    The other aspect was the requeue was being triggerred in cases it should not of. I suspect
    this could impose some performance penalty on certain setups and incorrectly trigger the
    listener to skip data.
Commits on Jul 4, 2015
  1. allow for qblock-size figure to override the automatic block size adj…

    To allow for site specific concerns, allow for a target for block sizing on non-ogg
    streams. This acts as a minimum as the blocks contain whole frames so we may want say
    500 byte blocks but some mp3 frames can be 1k.
Commits on Jul 3, 2015
Commits on Jul 2, 2015
  1. scale up the queue block size from ~480kbps.

    this may need a more non-linear scaling eventually so this should just allow for
    a larger bandwidth capability for Mbit/s streams
Commits on Jun 28, 2015
  1. two timing changes for source/listener client rescheduling and a auto…

    …matic queue block size adjustment
    With dealing with very high bitrate streams, 1 mbit+, certain internal limits prevent
    sufficient bitrate from being maintained.  Most typically because information about the
    rate provided is not available to certain areas without placing searches in hot paths.
    The most obviously trigger here is the incoming bitrate stat which is mainatined in the
    source structure but is not available to the backend writers.
    use a per-client adjustment value, passed from the source to the listener to help determine
    a more appropriate retry time based on the incoming bitrate.
    Provide an extra reschule hook in the worker. We still have the normal schedule timers
    but now also provide an optional flag that the listener can use to refer to a source
    flag, this means that the source, when it has processed something, can implicitly
    trigger any waiting (non-lagging) listeners to process without them waiting until some
    scheduled point. This is currently used for listeners who are at the front of the queue
    so are just guessing when to reschedule.
    Because there are limiters in the send routines to prevent excessive amounts being sent
    or recevied with one client, that together with anti busy loop triggers can limit the
    max throughput of a client.  While per-client triggers are scalable the second element
    is the block size read/sent.  We now scale blocks based on the incoming bitrate to at
    most ~9k instead of the 1.5k that is fixed or set by the qblock size xml setting.
Commits on Jun 4, 2015
Commits on May 31, 2015
Commits on May 20, 2015
  1. prevent illegal instruction dump on icecast shutdown.

    It only shows on later glibc and really means a multiple unlock which is undefined per spec.
    the free tree routine which is clearing out any virtual source stats is not taking a lock on
    each node before relaing, so add a wrapper for each case, no clients are present at the point
    this is run.
  2. win32 update since updating mingw32 build

    This is because gmtime_r and localtime_r are not really defined by deault without some extra
    defines which break other win32 assumed things like the printf args. Here we defines the gmtime_r
    and localtime_r in case they are missing.
Commits on May 4, 2015
  1. cut a 2.4.0 kh1 release

Commits on Apr 30, 2015
Commits on Apr 21, 2015
  1. tidy build for win32

Commits on Apr 20, 2015
Commits on Apr 2, 2015
  1. preload default types then try to load the mime types file

    seems that some installs of mime.types miss the audio/aac type, so by doing a small
    rearrangment, we load up the internal default types and then override them with the
    ones defined in the mime.type file.   This is consistent with windows as well.
Commits on Mar 4, 2015
  1. fixed possible abort trigger with multiple missing xslt requests

    double unlock causing thread routines to abort process
Something went wrong with that request. Please try again.