gstreamer fails intermittently
Bug #1466273 reported by
Michi Henning
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
gstreamer1.0 (Ubuntu) |
New
|
Critical
|
Unassigned | ||
thumbnailer (Ubuntu) |
Invalid
|
Undecided
|
Unassigned |
Bug Description
gstreamer occasionally fails to extract a thumbnail from a video file. It's clearly a race condition because, almost all of the time, it succeeds. To reproduce:
Check out the thumbnailer/devel branch at r217 and build it. Then:
cd build/src/vs-thumb
./vs-thumb fd://0 ./x.jpg <../../
Point a browser at the generated x.jpg file and check that the image was extracted correctly.
Now run
while ./vs-thumb fd://0 ./x.jpg <../../
Within maybe a hundred iterations or so, I get:
Error creating thumbnail: ThumbnailExtractor: change_state(): reading async messages: GStreamer error: negotiation problem.
Changed in thumbnailer: | |
importance: | Undecided → High |
affects: | gstreamer (Ubuntu) → gstreamer0.10 (Ubuntu) |
Changed in gstreamer0.10 (Ubuntu): | |
importance: | Undecided → High |
no longer affects: | gstreamer0.10 (Ubuntu) |
Changed in gstreamer1.0 (Ubuntu): | |
importance: | Undecided → Critical |
Changed in gstreamer (Ubuntu): | |
importance: | Undecided → Critical |
no longer affects: | gstreamer (Ubuntu) |
Changed in thumbnailer: | |
status: | New → Triaged |
Changed in thumbnailer (Ubuntu): | |
status: | New → Triaged |
importance: | Undecided → High |
no longer affects: | thumbnailer |
Changed in thumbnailer (Ubuntu): | |
importance: | High → Undecided |
To post a comment you must log in.
I'm also seeing this on my Nexus 4. Except here, gstreamer hangs and makes the process unkillable.
Here is a bit of trace from our code:
thumbnailer- service: [06:53:02.902] timeout, state = 2 service: [06:53:02.902] killing process 12806 service: [06:53:02.902] calling waitpid for process 12806 service: [06:53:31.900] waitpid for process 12806 returned
thumbnailer-
thumbnailer-
thumbnailer-
This happens when a timer fires. If gstreamer doesn't complete within 10 seconds, we kill the process. (Each video thumbnail is extracted in a separate process, so we can recover from gstreamer crashes and hangs.)
However, take a look at the time stamps. We sent a SIGKILL at 53.02 and immediately called waitpid(). But waitpid() does not return until 29 seconds later. This strongly suggests a kernel problem. (At least as far as I know, the only way for SIGKILL to not kill a process is if the process is asleep in the kernel at uninterruptible priority.)