NetPlay: Fixed crash when host loaded a game while no game was loaded (ConfigChanged notification was sent and an empty snapshot was sent to clients)
This commit is contained in:
parent
b4abaf36dc
commit
eb80a443b7
3 changed files with 15 additions and 14 deletions
|
@ -60,7 +60,7 @@ void Console::Initialize(string romFilename, stringstream *filestream, string ip
|
||||||
_memoryManager->RegisterIODevice(_apu.get());
|
_memoryManager->RegisterIODevice(_apu.get());
|
||||||
_memoryManager->RegisterIODevice(_controlManager.get());
|
_memoryManager->RegisterIODevice(_controlManager.get());
|
||||||
|
|
||||||
UpdateNesModel();
|
UpdateNesModel(false);
|
||||||
|
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
|
|
||||||
|
@ -208,7 +208,9 @@ void Console::Run()
|
||||||
_runLock.Acquire();
|
_runLock.Acquire();
|
||||||
_stopLock.Acquire();
|
_stopLock.Acquire();
|
||||||
|
|
||||||
targetTime = UpdateNesModel();
|
_model = NesModel::Auto;
|
||||||
|
|
||||||
|
targetTime = UpdateNesModel(false);
|
||||||
|
|
||||||
VideoDecoder::GetInstance()->StartThread();
|
VideoDecoder::GetInstance()->StartThread();
|
||||||
|
|
||||||
|
@ -250,7 +252,7 @@ void Console::Run()
|
||||||
|
|
||||||
//Get next target time, and adjust based on whether we are ahead or behind
|
//Get next target time, and adjust based on whether we are ahead or behind
|
||||||
double timeLag = EmulationSettings::GetEmulationSpeed() == 0 ? 0 : clockTimer.GetElapsedMS() - targetTime;
|
double timeLag = EmulationSettings::GetEmulationSpeed() == 0 ? 0 : clockTimer.GetElapsedMS() - targetTime;
|
||||||
targetTime = UpdateNesModel();
|
targetTime = UpdateNesModel(true);
|
||||||
clockTimer.Reset();
|
clockTimer.Reset();
|
||||||
targetTime -= timeLag;
|
targetTime -= timeLag;
|
||||||
if(targetTime < 0) {
|
if(targetTime < 0) {
|
||||||
|
@ -275,7 +277,7 @@ void Console::Run()
|
||||||
_runLock.Release();
|
_runLock.Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
double Console::UpdateNesModel()
|
double Console::UpdateNesModel(bool sendNotification)
|
||||||
{
|
{
|
||||||
bool configChanged = false;
|
bool configChanged = false;
|
||||||
if(EmulationSettings::NeedControllerUpdate()) {
|
if(EmulationSettings::NeedControllerUpdate()) {
|
||||||
|
@ -309,7 +311,7 @@ double Console::UpdateNesModel()
|
||||||
_ppu->SetNesModel(model);
|
_ppu->SetNesModel(model);
|
||||||
_apu->SetNesModel(model);
|
_apu->SetNesModel(model);
|
||||||
|
|
||||||
if(configChanged) {
|
if(configChanged && sendNotification) {
|
||||||
MessageManager::SendNotification(ConsoleNotificationType::ConfigChanged);
|
MessageManager::SendNotification(ConsoleNotificationType::ConfigChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class Console
|
||||||
|
|
||||||
void ResetComponents(bool softReset);
|
void ResetComponents(bool softReset);
|
||||||
void Initialize(string filename, stringstream *filestream = nullptr, string ipsFilename = "");
|
void Initialize(string filename, stringstream *filestream = nullptr, string ipsFilename = "");
|
||||||
double UpdateNesModel();
|
double UpdateNesModel(bool sendNotification);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Console();
|
Console();
|
||||||
|
|
|
@ -174,8 +174,6 @@ void ControlManager::WriteRAM(uint16_t addr, uint8_t value)
|
||||||
|
|
||||||
void ControlManager::StreamState(bool saving)
|
void ControlManager::StreamState(bool saving)
|
||||||
{
|
{
|
||||||
Stream<bool>(_refreshState);
|
|
||||||
|
|
||||||
//Restore controllers that were being used at the time the snapshot was made
|
//Restore controllers that were being used at the time the snapshot was made
|
||||||
//This is particularely important to ensure proper sync during NetPlay
|
//This is particularely important to ensure proper sync during NetPlay
|
||||||
ControllerType controllerTypes[4];
|
ControllerType controllerTypes[4];
|
||||||
|
@ -193,6 +191,7 @@ void ControlManager::StreamState(bool saving)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Stream<bool>(_refreshState);
|
||||||
Stream<NesModel>(nesModel);
|
Stream<NesModel>(nesModel);
|
||||||
Stream<ExpansionPortDevice>(expansionDevice);
|
Stream<ExpansionPortDevice>(expansionDevice);
|
||||||
Stream<ConsoleType>(consoleType);
|
Stream<ConsoleType>(consoleType);
|
||||||
|
@ -216,13 +215,13 @@ void ControlManager::StreamState(bool saving)
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateControlDevices();
|
UpdateControlDevices();
|
||||||
|
}
|
||||||
|
|
||||||
if(GetControlDevice(0)) {
|
if(GetControlDevice(0)) {
|
||||||
Stream(GetControlDevice(0));
|
Stream(GetControlDevice(0).get());
|
||||||
}
|
}
|
||||||
if(GetControlDevice(1)) {
|
if(GetControlDevice(1)) {
|
||||||
Stream(GetControlDevice(1));
|
Stream(GetControlDevice(1).get());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue