Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix random crash when exporting channels as WAV #93

Conversation

nyanpasu64
Copy link
Collaborator

Hopefully this code is approximately correct. I've tested it with CWavProgressDlg's timer set to run continuously (switch 200 to 0), and it seems to work without issues.

This code fixes the random crash when exporting multiple channels (due to a data race/race condition), and a theoretical issue that causes WAV files to be skipped entirely if the GUI dialog's progress bar timer fires before the audio thread gets a chance to start rendering (which is unlikely to happen unless the timer is modified to run continuously, as mentioned above).

Fixes #92.

If CWavProgressDlg::OnInitDialog() is modified to start a timer with a 0
millisecond period, then sometimes CWavProgressDlg::OnTimer() will run
before the render starts (CSoundGen::OnStartRender() is called). The
dialog calls CSoundGen::IsRendering() which returns false, and then
closes and initiates the next render, skipping the current one
(and leaving the file handle open).

This commit makes CSoundGen::IsRendering() return true before the render
starts, so the dialog properly waits for the render to finish.
@nyanpasu64 nyanpasu64 marked this pull request as ready for review November 6, 2021 09:05
@Gumball2415 Gumball2415 merged commit fe33fdd into Dn-Programming-Core-Management:master Nov 10, 2021
@nyanpasu64 nyanpasu64 deleted the fix-channel-export-race branch November 22, 2021 01:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Crash when writing to WAV (channel export?)
2 participants