Ticket #2261 (closed bug: obsolete)
media-on-windows-makes-sophie-uresponsive - When media is played on windows Sophie stops responding.
Reported by: | todor | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | X3 |
Component: | uncategorized | Version: | 2.0 |
Keywords: | Cc: | ||
Category: | unknown | Effort: | |
Importance: | 93 | Ticket_group: | |
Estimated Number of Hours: | 0 | Add Hours to Ticket: | 0 |
Billable?: | yes | Total Hours: | 0 |
Analysis_owners: | todor | Design_owners: | milo, stefan |
Imp._owners: | milo, stefan | Test_owners: | |
Analysis_reviewers: | stefan | Changelog: | |
Design_reviewers: | meddle, pap | Imp._reviewers: | deyan, todor |
Test_reviewers: | Analysis_score: | 3 | |
Design_score: | 3.5 | Imp._score: | 3.5 |
Test_score: | 0 |
Description (last modified by todor) (diff)
- Create book.
- Insert media.
- Open preview.
- Try to play the media.
- Sophie stops responding.
For some files Sophie crashes even before the user try to play the media.
Attachments
Change History
comment:3 Changed 15 years ago by stefan
- Status changed from s1b_analysis_finished to s2a_design_started
comment:5 Changed 15 years ago by stefan
- Status changed from s2a_design_started to s3b_implementation_finished
We came at conclusion that the problem is in the Windows's small pipe buffers. So, the massive native and ffmpeg's library debug dumping on the native's standard error output causes filling the pipe buffer, and therefor causing both processes to block. The solution is creating a thread that will constantly read the native's stderr, and will keep the pipe buffer clean. The code is as follows:
private static class ErrorDumper extends Thread { private final BufferedReader nativeStderr; public ErrorDumper(InputStream errorStream) { setDaemon(true); this.nativeStderr = new BufferedReader(new InputStreamReader(errorStream)); } @Override public void run() { //The read until exception pattern try { String line = null; do { line = this.nativeStderr.readLine(); SophieLog.info("[native-err] " + line); } while(line != null); } catch (IOException e) { SophieLog.error("ErrorDumper terminated", e); } SophieLog.info("ErrorDumper exiting"); } }
It is important to notice that, this thread is replacement for the old methods dumpError() and dumpErrorDelayed() in the NativeBridge class. This thread class is also located in the NativeBridge class.
comment:6 Changed 15 years ago by meddle
- Design_owners set to milo, stefan
- Status changed from s3b_implementation_finished to s3c_implementation_ok
- Imp._owners set to milo, stefan
- Analysis_reviewers set to stefan
- Analysis_score changed from 0 to 3
- Imp._reviewers set to deyan, todor
- Design_score changed from 0 to 3.5
- Design_reviewers set to meddle, pap
- Imp._score changed from 0 to 3.5
Merged to the trunk at [8574].