RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Disguise kit crash on Ubuntu 12.04

Melantus

Sorceror
Welcome

Does anyone of you met with such a case, or possibly knows how to eliminate the problem?

Appears during a random server save (one per day, sometimes two/day) , but we can run the server on the basis of last fresh save backup.

4:19:16 p.m. System.ArgumentOutOfRangeException: Argument is out of range.
at System.DateTime.op_Addition (DateTime d, TimeSpan t) [0x00000] in <filename unknown>: 0
at Server.Timer.get_Next () [0x00000] in <filename unknown>: 0
at Server.Items.DisguisePersistance.Serialize (Server.GenericWriter writer) [0x00000] in <filename unknown>: 0
at Server.StandardSaveStrategy.SaveItems (Server.SaveMetrics metrics) [0x00000] in <filename unknown>: 0
at Server.DualSaveStrategy + <Save> c__AnonStorey18. <> m__42 () [0x00000] in <filename unknown>: 0
at System.Threading.Thread.StartInternal () [0x00000] in <filename unknown>: 0 Crash: Generating report ... done



We think that problem seems to be here in disguisepersistance.cs:
Code (csharp):

foreach (DictionaryEntry entry in DisguiseTimers.Timers)
{
Mobile m = (Mobile)entry.Key;

writer.Write(m);
writer.Write(((Timer)entry.Value).Next - DateTime.UtcNow);
writer.Write(m.NameMod);
}
Specifically the line where it is writing the DateTime value. Somehow the math is getting out of range. Is it possible the date/times are handled differently in linux?
 

Melantus

Sorceror
I change our script for a console raport
foreach (DictionaryEntry entry in DisguiseTimers.Timers)
{
Mobile m = (Mobile)entry.Key;

writer.Write(m);
Console.WriteLine("(((Timer)entry.Value).Next - DateTime.UtcNow) is {0}",(((Timer)entry.Value).Next - DateTime.UtcNow));
writer.Write(((Timer)entry.Value).Next - DateTime.UtcNow);
writer.Write(m.NameMod);
}
Console.WriteLine("saved (((Timer)entry.Value).Next - DateTime.UtcNow)");
}
and test saves

Here is a raport when when no one uses disguise and server create save properly ( two players have them in their bags but dont use it)
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:38:46.8490030saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:38:47 Closing Save Files.
08:38:47 Save finished in 0,16 seconds.

When one player use disguise for name change (second tester got kit but unused)
Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:40:42.2530030(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:59:49.6639990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:40:42 Closing Save Files.
08:40:42 Save finished in 0,15 seconds

Two players used kit for name change (one online, second offline)
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:44:39.1640030(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:59:49.1250000(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:55:52.7529990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:44:39 Closing Save Files.
08:44:39 Save finished in 0,15 seconds

Next save log when two players use it (one logged, second unlogged)
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:52:10.5850020(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:52:17.7040000(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:48:21.3319990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:52:10 Closing Save Files.
08:52:10 Save finished in 0,17 seconds.

After 2 hours. Still only one toon is logged, second tester offline.
Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:42:12.9110030(((Timer)entry.Value).Next - DateTime.UtcNow) is 00:02:15.3779990(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:01:40.9940010saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:42:13 Closing Save Files.
10:42:13 Save finished in 0,17 seconds.

About three minuts later. First toon still online, second offline.
Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:44:31.1380020(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:00:02.8490000(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:03:59.2210000saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:44:31 Closing Save Files.
10:44:31 Save finished in 0,15 seconds.

As I see -00.00.02 time is for first (logged) toon, but when I initiate a save , his timer gone. I still see a timer for second - offline toon.
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:49:12.4760020(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:08:40.5590010saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:49:12 Closing Save Files.
10:49:12 Save finished in 0,16 seconds.

Next we logout first toon and logged second with timer -00.08.40. Enter a save and
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:52:34.6100020(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:55:36.3860000saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:52:34 Closing Save Files.
10:52:34 Save finished in 0,15 seconds.
As I see server properly restored timer for the toon that after using disguise was logged off and next logged onto after more than 2 hours, but logs indicated that two hours countdown continues even if the character is offline.

Still no crash

Also will check report at crash and paste it here.


Edit:
I logged for our first test toon again, used disguise, relog on my staff toon, use save and
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.12:02:09.3940020Error:
12:02:09 System.ArgumentOutOfRangeException: Argument is out of range.
at System.DateTime.op_Addition (DateTime d, TimeSpan t) [0x00000] in <filename unknown>:0
at Server.Timer.get_Next () [0x00000] in <filename unknown>:0
at Server.Items.DisguisePersistance.Serialize (Server.GenericWriter writer) [0x00000] in <filename unknown>:0
at Server.StandardSaveStrategy.SaveItems (Server.SaveMetrics metrics) [0x00000] in <filename unknown>:0
at Server.DualSaveStrategy+<Save>c__AnonStorey18.<>m__42 () [0x00000] in <filename unknown>:0
at System.Threading.Thread.StartInternal () [0x00000] in <filename unknown>:0 Crash: Generating report...done
Unfortunately an error has not occurred again when I tried to do the same steps (after restarting the server)

I still thinks abouth this record -735452.12:02:09.3940020
Same -735452 with current time are in each log.

Next, I check all our test toon in all accounts and I found one with crazy disguise record -735452 and current time on properities. I looked that this toon are member of NPC Thieses Guild and join ...... 0001.01.01 00:00:00 ????? . Lool. Mayby its a good shot :) So Next I check all other test toon, selected all which are member of theves guild and check disguise and guild join data. Each other got a proper record .
So I del this toon because we cannot change this elements of it and now our logs looks like this:

Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:18:40.7499980(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:25:03.9989990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
14:22:46 Closing Save Files.
14:22:46 Save finished in 0,15 seconds.

Perhaps this will solve the problem. 'll Let you know :)
 
Top