1. 12 Aug, 2015 1 commit
  2. 28 Jul, 2015 4 commits
  3. 23 Jul, 2015 3 commits
  4. 22 Jul, 2015 1 commit
  5. 06 Jul, 2015 1 commit
  6. 01 Jul, 2015 7 commits
    • Rémi Denis-Courmont's avatar
      src: remove vlc_object_alive() · 1f67a0dd
      Rémi Denis-Courmont authored
      1f67a0dd
    • Rémi Denis-Courmont's avatar
      interrupt: add replacement for vlc_object_alive() · ebb675de
      Rémi Denis-Courmont authored
      There are still many cases where waking up the thread sleeping is only
      half of the problem and waking it up half of the solution. For instance,
      the net_* and stream_* I/O functions have no ways to return a non-fatal
      error.
      ebb675de
    • Rémi Denis-Courmont's avatar
    • Rémi Denis-Courmont's avatar
    • Rémi Denis-Courmont's avatar
    • Rémi Denis-Courmont's avatar
      input: add vlc_poll_i11e() for interruptible poll() · bf6dcb5d
      Rémi Denis-Courmont authored
      This is a generic and inefficient but functional implementation.
      bf6dcb5d
    • Rémi Denis-Courmont's avatar
      input: add per-thread sleep interruption framework · 2d099490
      Rémi Denis-Courmont authored
      For the sake of simplicity and for historical reasons, access and demux
      modules perform I/O in blocking mode. If no data is available (or more
      generally no I/O events), the blocking I/O calls will sleep and hold
      the whole input thread. This can lead to long time-outs or even
      complete deadlocks, e.g. notably in case of network error.
      
      Originally, a volatile flag (b_die) was checked at frequent interval to
      ascertain whether to abort. This violated the threaded memory model,
      and was incompatible with race-to-idle power management.
      
      In 2007, the VLC object thread signaling functions were introduced
      (vlc_object_wait, vlc_object_signal, ...) in an attempt to solve this.
      They proved inflexible and were not compatible with poll/select-style
      I/O events multiplexing. Those functions were ultimately removed a
      little over a year later.
      
      In the mean time, the "wait pipe" had been introduced. It was focused
      on network/socket data reception. While it continues to be used, it
      suffers several limitations:
       - it affects other threads using the same VLC object,
         and indistinctly disrupts all I/O after the "kill",
       - it incorrectly assumes that the same VLC object is used everywhere
         (leading to race conditions and live loops),
       - the convenience wrappers around the wait pipe can only wait on one
         single I/O event direction on a single file descriptor at a time,
       - it is currently tied to the VLC input thread.
      
      Also at about the same time, thread cancellation was reintroduced.
      Thread cancellation has proven helpful for simple thread main loops.
      But it ranges from impractical to unusable when sleeping deep within
      layers of code, such as in access and stream modules.
      
      Generally the problem of interrupting I/O is an intractable halting
      problem. And in practice a given reading operations inside a demuxer
      cannot be interrupted without breaking the state machine of the
      demuxer - in many or most cases. This changes set is only an attempt
      to complement thread cancellation, This does overcome most limitations
      of the existing "wait pipe" system and of former VLC object signals:
      
       - It is triggered by a function call specifying a target context.
       The context is tied to the thread that needs to be woken up from
       sleep. This works quite well because the problem essentially relates
       to the call flow of the sleeping thread. On the trigger side, this is
       similar to thread cancellation.
      
       - It leaves some flexibility w.r.t. choice of sleeping primitives.
       This initial change uses semaphores. Low-level file I/O will be
       introduced later.
      
       - The wake-up mechanism is edge-triggered and can be fired multiple
       times. Thus it does not irreversibly prevent all I/O and sleeping
       operations once fired. It only interrupts the ongoing or next sleep.
       In principles non-fatal interruptions could be handled that way, for
       instance input thread seek (rather than forceful stop) although that
       is not part of the changes set.
      
       - It is not tied to any specific event. The initial use case is
       stopping the input thread and checking vlc_object_alive() but it can
       be used for other purposes.
      2d099490
  7. 28 Jun, 2015 1 commit
  8. 04 Jun, 2015 1 commit
  9. 03 Jun, 2015 1 commit
  10. 20 May, 2015 1 commit
  11. 12 May, 2015 1 commit
  12. 30 Mar, 2015 1 commit
    • Rémi Denis-Courmont's avatar
      input: add support for pointer options to input item · 2822a778
      Rémi Denis-Courmont authored
      Pointers cannot be inherited as normal configuration item for somewhat
      obvious reasons. For output parameters, this is not much of an issue as
      LibVLC sets the pointer values directly on its media player object. But
      for input-related parameters, LibVLC would need to store pointer values
      in the media item. Thus this change to input items.
      
      Note that pointers are considered intrinsically unsafe, so there are no
      flags for the time being.
      2822a778
  13. 25 Mar, 2015 1 commit
    • Thomas Guillem's avatar
      input: add b_net variable in item · 4089c841
      Thomas Guillem authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
      
      
      When an item was a NET/STREAM type, there was no way to distinguish if the item
      was a file, a playlist or directory.
      
      Add a new variable, b_net in addition to i_type. This variable is automatically
      set when creating a new Item (set to true for ITEM_TYPE_STREAM). It can be
      overridden via the new input_item_NewWithTypeExt function. This new function
      will allow accesses to create FILE, or DIRECTORY items with b_net set to true.
      
      Unless forced, the preparser won't parse items with b_net == true.
      Signed-off-by: Jean-Baptiste Kempf's avatarJean-Baptiste Kempf <jb@videolan.org>
      4089c841
  14. 21 Mar, 2015 2 commits
  15. 19 Mar, 2015 3 commits
  16. 18 Dec, 2014 1 commit
  17. 03 Nov, 2014 1 commit
  18. 01 Nov, 2014 6 commits
  19. 29 Oct, 2014 1 commit
  20. 16 Oct, 2014 2 commits