Summary: | artsd starts using 100% CPU after playing notifications sounds | ||
---|---|---|---|
Product: | arts | Reporter: | Jure Repinc <jlp> |
Component: | artsd | Assignee: | Stefan Westerfeld <stefan> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Gentoo Packages | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: |
Description
Jure Repinc
2005-05-31 22:19:09 UTC
I applied the attached patch from this bug report: http://bugs.kde.org/show_bug.cgi?id=88474 And the problem is gone. So I guess it would be nice if we could see this patch in the official KDE. SVN commit 423127 by carewolf: Commiting fix for checking xrun in pcm_avail_update. Commited based on user feedback as I do not have 64bit system. BUG: 88474, 106569 M +27 -2 audioioalsa9.cc --- trunk/KDE/arts/flow/audioioalsa9.cc #423126:423127 @@ -260,15 +260,40 @@ int AudioIOALSA::getParam(AudioParam p) { + snd_pcm_sframes_t avail; switch(p) { case canRead: if (! m_pcm_capture) return -1; - return snd_pcm_frames_to_bytes(m_pcm_capture, snd_pcm_avail_update(m_pcm_capture)); + while ((avail = snd_pcm_avail_update(m_pcm_capture)) < 0) { + if (avail == -EPIPE) + avail = xrun(m_pcm_capture); +#ifdef HAVE_SND_PCM_RESUME + else if (avail == -ESTRPIPE) + avail = resume(m_pcm_capture); +#endif + if (avail < 0) { + arts_info("Capture error: %s", snd_strerror(avail)); + return -1; + } + } + return snd_pcm_frames_to_bytes(m_pcm_capture, avail); case canWrite: if (! m_pcm_playback) return -1; - return snd_pcm_frames_to_bytes(m_pcm_playback, snd_pcm_avail_update(m_pcm_playback)); + while ((avail = snd_pcm_avail_update(m_pcm_playback)) < 0) { + if (avail == -EPIPE) + avail = xrun(m_pcm_playback); +#ifdef HAVE_SND_PCM_RESUME + else if (avail == -ESTRPIPE) + avail = resume(m_pcm_playback); +#endif + if (avail < 0) { + arts_info("Playback error: %s", snd_strerror(avail)); + return -1; + } + } + return snd_pcm_frames_to_bytes(m_pcm_playback, avail); case selectReadFD: return -1; |