Fix assertion failure when command triggers PBS tunnel/bridge unreserve
In the case where the signal update buffer is not currently empty
This commit is contained in:
@@ -241,7 +241,9 @@ void UnreserveRailTrack(TileIndex tile, Track t)
|
|||||||
if (IsTunnelBridgePBS(tile)) {
|
if (IsTunnelBridgePBS(tile)) {
|
||||||
SetTunnelBridgeExitSignalState(tile, SIGNAL_STATE_RED);
|
SetTunnelBridgeExitSignalState(tile, SIGNAL_STATE_RED);
|
||||||
} else {
|
} else {
|
||||||
UpdateSignalsOnSegment(tile, INVALID_DIAGDIR, GetTileOwner(tile));
|
UpdateSignalsInBufferIfOwnerNotAddable(GetTileOwner(tile));
|
||||||
|
AddSideToSignalBuffer(tile, INVALID_DIAGDIR, GetTileOwner(tile));
|
||||||
|
UpdateSignalsInBuffer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MarkBridgeOrTunnelDirtyOnReservationChange(tile, VMDF_NOT_MAP_MODE);
|
MarkBridgeOrTunnelDirtyOnReservationChange(tile, VMDF_NOT_MAP_MODE);
|
||||||
|
@@ -735,6 +735,18 @@ void UpdateSignalsInBuffer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update signals in buffer if the owner could not be added to the current buffer
|
||||||
|
* Called from 'outside'
|
||||||
|
*/
|
||||||
|
void UpdateSignalsInBufferIfOwnerNotAddable(Owner owner)
|
||||||
|
{
|
||||||
|
if (!_globset.IsEmpty() && !IsOneSignalBlock(owner, _last_owner)) {
|
||||||
|
UpdateSignalsInBuffer(_last_owner);
|
||||||
|
_last_owner = INVALID_OWNER; // invalidate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add track to signal update buffer
|
* Add track to signal update buffer
|
||||||
|
@@ -152,5 +152,6 @@ void SetSignalsOnBothDir(TileIndex tile, Track track, Owner owner);
|
|||||||
void AddTrackToSignalBuffer(TileIndex tile, Track track, Owner owner);
|
void AddTrackToSignalBuffer(TileIndex tile, Track track, Owner owner);
|
||||||
void AddSideToSignalBuffer(TileIndex tile, DiagDirection side, Owner owner);
|
void AddSideToSignalBuffer(TileIndex tile, DiagDirection side, Owner owner);
|
||||||
void UpdateSignalsInBuffer();
|
void UpdateSignalsInBuffer();
|
||||||
|
void UpdateSignalsInBufferIfOwnerNotAddable(Owner owner);
|
||||||
|
|
||||||
#endif /* SIGNAL_FUNC_H */
|
#endif /* SIGNAL_FUNC_H */
|
||||||
|
Reference in New Issue
Block a user