Opened 15 years ago
Closed 15 years ago
#6323 closed defect (fixed)
ThreadedFileWriter::Write() writes wrong data if buffer usage < bytes to write
Reported by: | anonymous | Owned by: | Isaac Richards |
---|---|---|---|
Priority: | major | Milestone: | 0.22 |
Component: | MythTV - General | Version: | head |
Severity: | high | Keywords: | |
Cc: | Stuart Auchterlonie | Ticket locked: | no |
Description
If ThreadedFileWrite::Write() gets called with data larger than the currently free space available in the ring buffer, TFW::Write() loops and writes out the data piece by piece as space gets available. Unfortunately it never bothers increasing the offset for the data buffer it reads from, so it basically writes out the same data every iteration, just different sizes of it.
The following patch fixes that and adds the volatile type modifier to the read and write position variables as they are read from and written to from different threads. This actually tells the compiler about it (which is a good thing) and prevents certain problems from ever happening like we read an old value becomes it still in a register.
Argh, too fast. Certainly the last sentence was more like: "This actually tells the compiler about it (which is a good thing) and prevents certain problems from ever happening like we read an old value because it's still in a cached register."