1. 12 Apr, 2008 3 commits
    • Max Kellermann's avatar
      yet more unsigned integers · a5aa5a02
      Max Kellermann authored
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7287 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      a5aa5a02
    • Eric Wong's avatar
      Drop metadata updates from HTTP for now (input HTTP, and shout) · 45ebb851
      Eric Wong authored
      It is way more complicated than it should be; and
      locking it for thread-safety is too difficult.
      
      [merged r7183 from branches/ew]
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7241 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      45ebb851
    • Eric Wong's avatar
      Initial cut of fork() => pthreads() for decoder and player · 9cf66d0e
      Eric Wong authored
      I initially started to do a heavy rewrite that changed the way processes
      communicated, but that was too much to do at once.  So this change only
      focuses on replacing the player and decode processes with threads and
      using condition variables instead of polling in loops; so the changeset
      itself is quiet small.
      
      * The shared output buffer variables will still need locking
      to guard against race conditions.  So in this effect, we're probably
      just as buggy as before.  The reduced context-switching overhead of
      using threads instead of processes may even make bugs show up more or
      less often...
      
      * Basic functionality appears to be working for playing local (and NFS)
      audio, including:
      play, pause, stop, seek, previous, next, and main playlist editing
      
      * I haven't tested HTTP streams yet, they should work.
      
      * I've only tested ALSA and Icecast.  ALSA works fine, Icecast
      metadata seems to get screwy at times and breaks song
      advancement in the playlist at times.
      
      * state file loading works, too (after some last-minute hacks with
      non-blocking wakeup functions)
      
      * The non-blocking (*_nb) variants of the task management functions are
      probably overused.  They're more lenient and easier to use because
      much of our code is still based on our previous polling-based system.
      
      * It currently segfaults on exit.  I haven't paid much attention
      to the exit/signal-handling routines other than ensuring it
      compiles.  At least the state file seems to work.  We don't
      do any cleanups of the threads on exit, yet.
      
      * Update is still done in a child process and not in a thread.
      To do this in a thread, we'll need to ensure it does proper
      locking and communication with the main thread; but should
      require less memory in the end because we'll be updating
      the database "in-place" rather than updating a copy and
      then bulk-loading when done.
      
      * We're more sensitive to bugs in 3rd party libraries now.
      My plan is to eventually use a master process which forks()
      and restarts the child when it dies:
      locking and communication with the main thread; but should
      require less memory in the end because we'll be updating
      the database "in-place" rather than updating a copy and
      then bulk-loading when done.
      
      * We're more sensitive to bugs in 3rd party libraries now.
      My plan is to eventually use a master process which forks()
      and restarts the child when it dies:
      
      master - just does waitpid() + fork() in a loop
      \- main thread
      \- decoder thread
      \- player thread
      
      At the beginning of every song, the main thread will set
      a dirty flag and update the state file.  This way, if we
      encounter a song that triggers a segfault killing the
      main thread, the master will start the replacement main
      on the next song.
      
      * The main thread still wakes up every second on select()
      to check for signals; which affects power management.
      
      [merged r7138 from branches/ew]
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7240 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      9cf66d0e
  2. 05 Feb, 2008 1 commit
  3. 26 Jan, 2008 2 commits
  4. 03 Jan, 2008 1 commit
    • Eric Wong's avatar
      Cleanup #includes of standard system headers and put them in one place · cb8f1af3
      Eric Wong authored
      This will make refactoring features easier, especially now that
      pthreads support and larger refactorings are on the horizon.
      
      Hopefully, this will make porting to other platforms (even
      non-UNIX-like ones for masochists) easier, too.
      
      os_compat.h will house all the #includes for system headers
      considered to be the "core" of MPD.  Headers for optional
      features will be left to individual source files.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7130 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      cb8f1af3
  5. 01 Jan, 2008 1 commit
    • Eric Wong's avatar
      Simplify decode cleanup logic a bit · 2cc59816
      Eric Wong authored
      DECODE_STATE_STOP is always set as dc->state, and dc->stop
      is always cleared.  So handle it in decodeStart once rather
      than doing it in every plugin.
      
      While we're at it, fix a long-standing (but difficult to
      trigger) bug in mpc_decode where we failed to return
      if mpc_decoder_initialize() fails.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7122 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      2cc59816
  6. 05 Sep, 2007 1 commit
  7. 22 Aug, 2007 1 commit
    • J. Alexander Treuman's avatar
      inputPlugins/mp3_plugin: parse LAME tags for ReplayGain info · fe4b16ed
      J. Alexander Treuman authored
      Parse ReplayGain info in LAME tags and use it if no ID3v2 ReplayGain tags
      are found.  This is currently a bit unsafe, as apparently some LAME tags
      have bogus ReplayGain values.  But I'm finding a lot of MP3s with valid
      LAME tags that fail the LAME tag CRC check.  So until I figure out why
      that's happening, it's an unreliable method for checking if the LAME tag is
      valid.
      
      A big thanks to tmz for writing the original patch.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@6798 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      fe4b16ed
  8. 03 Jun, 2007 1 commit
  9. 09 Apr, 2007 1 commit
  10. 05 Apr, 2007 1 commit
  11. 14 Jan, 2007 2 commits
  12. 23 Dec, 2006 5 commits
  13. 06 Oct, 2006 1 commit
  14. 03 Oct, 2006 1 commit
  15. 26 Aug, 2006 1 commit
    • Eric Wong's avatar
      Replace strdup and {c,re,m}alloc with x* variants to check for OOM errors · 90847fc8
      Eric Wong authored
      I'm checking for zero-size allocations and assert()-ing them,
      so we can more easily get backtraces and debug problems, but we'll
      also allow -DNDEBUG people to live on the edge if they wish.
      
      We do not rely on errno when checking for OOM errors because
      some implementations of malloc do not set it, and malloc
      is commonly overridden by userspace wrappers.
      
      I've spent some time looking through the source and didn't find any
      obvious places where we would explicitly allocate 0 bytes, so we
      shouldn't trip any of those assertions.
      
      We also avoid allocating zero bytes because C libraries don't
      handle this consistently (some return NULL, some not); and it's
      dangerous either way.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4690 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      90847fc8
  16. 23 Aug, 2006 4 commits
  17. 20 Aug, 2006 1 commit
  18. 13 Aug, 2006 2 commits
  19. 01 Aug, 2006 1 commit
    • Eric Wong's avatar
      Several fixes uncovered with -pedantic · 5aca21a5
      Eric Wong authored
      playerData.c:
      proper error checking
      
      directory.c:
      properly check myFgets() for errors
      (it returns NULL on error)
      
      inputPlugins/mp3_plugin.c
      get rid of commas at the end of enums
      
      interface.c:
      we weren't using long long, so strtoll isn't needed
      get rid of void-pointer arithmetic
      
      sllist.c:
      get rid of void-pointer arithmetic
      
      compress.c:
      get rid of C++ comments, some compilers don't accept them
      
      Note that I personally like void pointer arithmetic, but some
      ancient compilers don't support them :(
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4510 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      5aca21a5
  20. 26 Jul, 2006 6 commits
  21. 25 Jul, 2006 3 commits