jyavenard

Untitled

May 3rd, 2014
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. diff --git a/mythtv/libs/libmythtv/ringbuffer.cpp b/mythtv/libs/libmythtv/ringbuffer.cpp
  2. index 7a5f744..2946040 100644
  3. --- a/mythtv/libs/libmythtv/ringbuffer.cpp
  4. +++ b/mythtv/libs/libmythtv/ringbuffer.cpp
  5. @@ -504,15 +504,14 @@ long long RingBuffer::Seek(long long pos, int whence, bool has_lock)
  6. ((SEEK_CUR==whence)?"SEEK_CUR":"SEEK_END"))
  7. .arg(has_lock?"locked":"unlocked"));
  8.  
  9. - if (!has_lock)
  10. - {
  11. - rwlock.lockForWrite();
  12. - }
  13. -
  14. long long ret;
  15.  
  16. - if (readInternalMode)
  17. + if (readInternalMode) // reading readInternal is atomic, so no need for locking
  18. {
  19. + if (!has_lock)
  20. + {
  21. + rwlock.lockForWrite();
  22. + }
  23. poslock.lockForWrite();
  24. // only valid for SEEK_SET & SEEK_CUR
  25. switch (whence)
  26. @@ -533,6 +532,18 @@ long long RingBuffer::Seek(long long pos, int whence, bool has_lock)
  27. }
  28. else
  29. {
  30. + if (dynamic_cast<FileRingBuffer*>(this))
  31. + {
  32. + StopReads();
  33. + }
  34. + if (!has_lock)
  35. + {
  36. + rwlock.lockForWrite();
  37. + }
  38. + if (dynamic_cast<FileRingBuffer*>(this))
  39. + {
  40. + StartReads();
  41. + }
  42. ret = SeekInternal(pos, whence);
  43. }
Advertisement
Add Comment
Please, Sign In to add comment