Fix for RunUO Crash if Performance tab on Admin gump is open within first 100seconds of server running.
Completion of the DynamicSaveStrategy. Background saves are now safe; triggered only by the autoSave or command [BackgroundSave ([BGSave)
This commit is contained in:
parent
0afa707b24
commit
67af95cf0b
12 changed files with 169 additions and 84 deletions
|
|
@ -35,25 +35,38 @@ namespace Server {
|
|||
}
|
||||
|
||||
private Queue<Item> _decayQueue;
|
||||
private bool _permitBackgroundWrite;
|
||||
|
||||
public StandardSaveStrategy() {
|
||||
_decayQueue = new Queue<Item>();
|
||||
}
|
||||
|
||||
public override void Save( SaveMetrics metrics ) {
|
||||
SaveMobiles( metrics );
|
||||
SaveItems( metrics );
|
||||
SaveGuilds( metrics );
|
||||
protected bool PermitBackgroundWrite { get { return _permitBackgroundWrite; } set { _permitBackgroundWrite = value; } }
|
||||
|
||||
protected bool UseSequentialWriters { get { return (World.SaveType == World.SaveOption.Normal || !_permitBackgroundWrite); } }
|
||||
|
||||
public override void Save(SaveMetrics metrics, bool permitBackgroundWrite)
|
||||
{
|
||||
_permitBackgroundWrite = permitBackgroundWrite;
|
||||
|
||||
SaveMobiles(metrics);
|
||||
SaveItems(metrics);
|
||||
SaveGuilds(metrics);
|
||||
|
||||
if (UseSequentialWriters)
|
||||
World.NotifyDiskWriteComplete();
|
||||
}
|
||||
|
||||
protected void SaveMobiles( SaveMetrics metrics ) {
|
||||
protected void SaveMobiles(SaveMetrics metrics)
|
||||
{
|
||||
Dictionary<Serial, Mobile> mobiles = World.Mobiles;
|
||||
|
||||
GenericWriter idx;
|
||||
GenericWriter tdb;
|
||||
GenericWriter bin;
|
||||
|
||||
if ( World.SaveType == World.SaveOption.Normal ) {
|
||||
if (UseSequentialWriters)
|
||||
{
|
||||
idx = new BinaryFileWriter( World.MobileIndexPath, false );
|
||||
tdb = new BinaryFileWriter( World.MobileTypesPath, false );
|
||||
bin = new BinaryFileWriter( World.MobileDataPath, true );
|
||||
|
|
@ -92,7 +105,8 @@ namespace Server {
|
|||
bin.Close();
|
||||
}
|
||||
|
||||
protected void SaveItems( SaveMetrics metrics ) {
|
||||
protected void SaveItems(SaveMetrics metrics)
|
||||
{
|
||||
Dictionary<Serial, Item> items = World.Items;
|
||||
List<Item> decaying = new List<Item>();
|
||||
|
||||
|
|
@ -100,7 +114,8 @@ namespace Server {
|
|||
GenericWriter tdb;
|
||||
GenericWriter bin;
|
||||
|
||||
if ( World.SaveType == World.SaveOption.Normal ) {
|
||||
if (UseSequentialWriters)
|
||||
{
|
||||
idx = new BinaryFileWriter( World.ItemIndexPath, false );
|
||||
tdb = new BinaryFileWriter( World.ItemTypesPath, false );
|
||||
bin = new BinaryFileWriter( World.ItemDataPath, true );
|
||||
|
|
@ -142,11 +157,13 @@ namespace Server {
|
|||
bin.Close();
|
||||
}
|
||||
|
||||
protected void SaveGuilds( SaveMetrics metrics ) {
|
||||
protected void SaveGuilds(SaveMetrics metrics)
|
||||
{
|
||||
GenericWriter idx;
|
||||
GenericWriter bin;
|
||||
|
||||
if ( World.SaveType == World.SaveOption.Normal ) {
|
||||
if (UseSequentialWriters)
|
||||
{
|
||||
idx = new BinaryFileWriter( World.GuildIndexPath, false );
|
||||
bin = new BinaryFileWriter( World.GuildDataPath, true );
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue