Address potential source of race confition inside the play function (#658)
Current working theory is that setting the future opens a brief interval where it deconstructs the old future and returning an invalid QFuture,, causing a segmentation fault.
This commit is contained in:
parent
e6f06d8959
commit
dd53b01ffd
@ -3873,17 +3873,16 @@ void Courtroom::handle_song(QStringList *p_contents)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QFuture<QString> future = QtConcurrent::run(music_player, &AOMusicPlayer::play, f_song, channel,
|
|
||||||
looping, effect_flags);
|
|
||||||
if (channel == 0) {
|
if (channel == 0) {
|
||||||
// Current song UI only displays the song playing, not other channels.
|
// Current song UI only displays the song playing, not other channels.
|
||||||
// Any other music playing is irrelevant.
|
// Any other music playing is irrelevant.
|
||||||
if (music_player->music_watcher.isRunning()) {
|
if (music_player->music_watcher.isRunning()) {
|
||||||
music_player->music_watcher.cancel();
|
music_player->music_watcher.cancel();
|
||||||
}
|
}
|
||||||
music_player->music_watcher.setFuture(future);
|
|
||||||
ui_music_name->setText(tr("[LOADING] %1").arg(f_song_clear));
|
ui_music_name->setText(tr("[LOADING] %1").arg(f_song_clear));
|
||||||
}
|
}
|
||||||
|
music_player->music_watcher.setFuture(QtConcurrent::run(music_player, &AOMusicPlayer::play, f_song, channel,
|
||||||
|
looping, effect_flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::update_ui_music_name()
|
void Courtroom::update_ui_music_name()
|
||||||
|
Loading…
Reference in New Issue
Block a user