Re: [Audacity-devel] TrackArtist::UpdatePrefs() race
A free multi-track audio editor and recorder
Brought to you by:
aosiniao
From: Leland <le...@au...> - 2009-05-27 05:55:57
|
Martyn Shaw wrote: > Hi > > I see problem with TrackArtist::UpdatePrefs() not being called soon > enough when I close the prefs dialog after changing the Spectrogram size. > > Calls from TrackArtist::DrawClipSpectrum to clip->GetSpectrogram rely > on TrackArtist::UpdatePrefs() having updated mWindowSize, which it > hasn't yet done. clip->GetSpectrogram reads the pref directly so has > the 'current' size. Mismatch of sizes causes a crash if you are > increasing the windowSize and an incorrect drawing if you aren't. > > Obviously I could fix this specific case, but there may be others, so > I looked further. > > 'OK' on the AudacityProject::OnPreferences() dialog causes an onPaint > event which does the drawing of the spectrogram, > AudacityProject::UpdatePrefs() (which calls > TrackArtist::UpdatePrefs()) comes after that. Should we be calling > AudacityProject::OnPreferences() from PrefsDialog::OnOK? Maybe that > would be safer? > Safer, yes, and corrected. But, what I'd really go for is a "registration and update notification" kind of system where classes that need to know when specific (or wildcarded) keys get updated, they simply register a function callback with a Preferences class. When the value for the indicated key gets updated, the registered function is called. In a way, we've already done this...sort of. That's what all of the UpdatePrefs() functions are for. Unfortunately, it's a really manual sort of process right now. Leland |