| Summary: | artsd starts using 100% CPU after playing notifications sounds | ||
|---|---|---|---|
| Product: | [Unmaintained] arts | Reporter: | Jure Repinc <jlp> |
| Component: | artsd | Assignee: | Stefan Westerfeld <stefan> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Gentoo Packages | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
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;
|