Summary: | artsd crashes when closing windows | ||
---|---|---|---|
Product: | [Unmaintained] arts | Reporter: | Jens Zurheide <jens.zurheide> |
Component: | artsd | Assignee: | Stefan Westerfeld <stefan> |
Status: | RESOLVED DUPLICATE | ||
Severity: | crash | CC: | hyatte |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Jens Zurheide
2004-02-14 08:37:53 UTC
*** Bug 75249 has been marked as a duplicate of this bug. *** On my system, artsd is so unreliable I rarely hear two sounds in a row. I can disable the sound system altogether (go to the control center->Sound & Multimedia->Sound System, and uncheck "Enable the sound system") and it still crashes! I have my system set up to play a sound when a window maximizes, and play another sound when a window minimizes. To reproduce the problem, repeatedly click on a window in the task bar. Artsd will crash repeatedly even though I've killed the only running artsd process and the sound system isn't even enabled! Looking at the code in file arts/flow/gslschedule.cc I saw some interesting things I do not fully understand. Sorry for some (dumb?) questions following now: Function void AudioPort::connect(Port *psource) has lines: source->destcount++; sourcemodule = source->parent; Function void AudioPort::disconnect(Port *psource) has lines: sourcemodule = 0; source->destcount--; source = 0; Are these source->destcount++/-- lines are tracking the numbers of connections? If yes, shouldn't sourcemodule be a std::list<...> to keep track of the various connections? Then the line assert(sourcemodule == source->parent); should be more like: like std::list<...>::iterator it = sourcemodule.find(source->parent()); assert( it == sourcemodule.end() ); sourcemodule.erase( it ); Shouldn't source be set to 0 in ::disconnect() only if source->destcount == 0? |