| Summary: | Arts + MP3 causing hard lockup | ||
|---|---|---|---|
| Product: | [Unmaintained] akodelib | Reporter: | Steve <steve_v> |
| Component: | general | Assignee: | Allan Sandfeld <kde> |
| Status: | RESOLVED FIXED | ||
| Severity: | crash | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Compiled Sources | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Steve
2004-09-22 17:02:51 UTC
Open a konsole, kill artsd: "killall artsd2, and start artsd with debugging: "artsd -l0". Report what it prints, it also shouldn't be able to lockup the system in this state. Output of artsd -l0: artsd version is 1.3.0 gsl: using Unix98 pthreads directly for mutexes and conditions [artsd: 10563] SoundServerStartup --> got lock autodetecting driver: - toss: 4 - null: -1 - alsa: 15 - oss: 10 ... which means we'll default to alsa ALSA driver: default buffering: 7 fragments with 1024 bytes (audio latency is 40.6 ms) ALSA lib pcm_hw.c:549:(snd_pcm_hw_start) SNDRV_PCM_IOCTL_START failed: Broken pipe Closing ALSA-driver virtualize StereoVolumeControl ALSA driver: default buffering: 7 fragments with 1024 bytes (audio latency is 40.6 ms) ALSA lib pcm_hw.c:549:(snd_pcm_hw_start) SNDRV_PCM_IOCTL_START failed: Broken pipe audio format is 44100 Hz, 16 bits, 2 channels addDirectory(/usr/kde/3.3/lib/mcop,) addDirectory(/usr/kde/3.3/lib/mcop/Amarok,Amarok) addDirectory(/usr/kde/3.3/lib/mcop/Arts,Arts) addDirectory(/usr/kde/3.3/lib/mcop/Arts/Environment,Arts::Environment) addDirectory(/usr/kde/3.3/lib/mcop/Noatun,Noatun) addDirectory(/home/steve/.mcop/trader-cache,) Arts::MidiManager registered successfully. [artsd: 10563] SoundServerStartup <-- released lock UnixManager: got notifyIO socketconnection created, fd = 8 search playobject, extension = mp3 creating akodeMPEGPlayObject to play file /home/steve/Desktop/GARBAGE #1 Crush.mp3 akode: opening /home/steve/Desktop/GARBAGE #1 Crush.mp3 akode: play akode: eof akode: halt ---------------------------------- Artsd consumes all availabe cpu time, does not respond to ctrl-c, and must be killed with -9. It doesn't take the whole system with it though :-) Cheers. Steve. Sounds like some odd error state. Send the problematic file directly to me at kde@carewolf.com, and I will have a look at what goes wrong. What is status? Is it still a problem, do you an example file you can send me? Sorry man, I thought I did. turns out I hit reply (wrong email) will send to kde(at)karewolf.com On Thursday 04 November 2004 17:36, Steve wrote:
> Sorry man, I thought I did. turns out I hit reply (wrong email)
> will send to kde(at)karewolf.com
You better not. My domain is carewolf.com :)
All good, just annother damn typo, I meant care with a c :-) CVS commit by carewolf:
Two changes:
* Also add retry counter on first-frame seeking to avoid locking on
completely incorrect files
* Ask MADlib to ignore CRCs, it is pretty useless anyway.
BUG: 90025
M +9 -2 mpeg_decoder.cpp 1.9
--- kdemultimedia/akode/plugins/mpeg_decoder/mpeg_decoder.cpp #1.8:1.9
@@ -118,5 +118,5 @@ MPEGDecoder::MPEGDecoder(File *src) {
mad_synth_init(&m_data->synth);
- mad_stream_options(&m_data->stream, 0);
+ mad_stream_options(&m_data->stream, MAD_OPTION_IGNORECRC);
m_data->eof = false;
@@ -364,8 +364,15 @@ bool MPEGDecoder::readFrame(AudioFrame*
if (!prepare()) return false;
+ int retries = 0;
first_frame:
+ if (retries >= 8) {
+ // fatal error
+ m_data->error = true;
+ return false;
+ }
res = mad_frame_decode(&m_data->frame, &m_data->stream);
if (res != 0) {
if (m_data->stream.error == MAD_ERROR_BUFLEN) {
+ retries++;
moreData(true);
}
@@ -376,5 +383,5 @@ bool MPEGDecoder::readFrame(AudioFrame*
if (MAD_RECOVERABLE(m_data->stream.error)) {
#ifdef MPEG_DEBUG
- cerr << "Invalid frame\n";
+ cerr << "Invalid frame: " << mad_stream_errorstr(&m_data->stream) << "\n";
#endif
m_data->metaframe_filter(true);
|