Add sequence numbers to game state (experimental)

This catches output dependency violations, e.g. two threads doing a
read-modify-write without synchronization.

New struct emptypedstr member seqno.  Make sure all members of unit
empobj_storage share it.  Set it in ef_blank() and ef_set_uid(), step
it in ef_write().  fairland and files don't use ef_set_uid(); need to
set it manually in files.c's main() and file_sct_init().

Factor do_read() out of fillcache() to make it available for
new get_seqno().
This commit is contained in:
Markus Armbruster 2008-03-21 14:22:07 +01:00 committed by Markus Armbruster
parent 2aec870a14
commit dc9d847b8b
20 changed files with 124 additions and 18 deletions

View file

@ -70,6 +70,7 @@ struct realmstr {
/* initial part must match struct empobj */
short ef_type;
short r_uid; /* realm table index */
unsigned r_seqno;
time_t r_timestamp; /* Last time this realm was touched */
natid r_cnum; /* country number */
/* end of part matching struct empobj */
@ -82,6 +83,7 @@ struct natstr {
/* initial part must match struct empobj */
short ef_type;
short nat_uid; /* equals nat_cnum */
unsigned nat_seqno;
time_t nat_timestamp;
natid nat_cnum; /* our country number */
/* end of part matching struct empobj */