From 5bb417009a0e8d6f0ed05a4007ea0248f7cb4138 Mon Sep 17 00:00:00 2001 From: Haru Date: Mon, 27 Aug 2018 01:14:09 +0200 Subject: Fix a race condition in the storage saving code Signed-off-by: Haru --- src/map/intif.c | 7 ++++--- src/map/intif.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/map/intif.c b/src/map/intif.c index 84fad6c6f..ed4c0e2d2 100644 --- a/src/map/intif.c +++ b/src/map/intif.c @@ -513,7 +513,7 @@ static void intif_parse_account_storage(int fd) * @packet 0x3011 [out] .W .L .P * @param sd [in] pointer to session data. */ -static void intif_send_account_storage(const struct map_session_data *sd) +static void intif_send_account_storage(struct map_session_data *sd) { int len = 0, i = 0, c = 0; @@ -541,6 +541,8 @@ static void intif_send_account_storage(const struct map_session_data *sd) } WFIFOSET(inter_fd, len); + + sd->storage.save = false; // Save request has been sent } /** @@ -562,10 +564,9 @@ static void intif_parse_account_storage_save_ack(int fd) if (saved == 0) { ShowError("intif_parse_account_storage_save_ack: Storage has not been saved! (AID: %d)\n", account_id); + sd->storage.save = true; // Flag it as unsaved, to re-attempt later return; } - - sd->storage.save = false; // Storage has been saved. } //================================================================= diff --git a/src/map/intif.h b/src/map/intif.h index 1e98d11f8..21f7a494c 100644 --- a/src/map/intif.h +++ b/src/map/intif.h @@ -68,7 +68,7 @@ struct intif_interface { int (*saveregistry) (struct map_session_data *sd); int (*request_registry) (struct map_session_data *sd, int flag); void (*request_account_storage) (const struct map_session_data *sd); - void (*send_account_storage) (const struct map_session_data *sd); + void (*send_account_storage) (struct map_session_data *sd); int (*request_guild_storage) (int account_id, int guild_id); int (*send_guild_storage) (int account_id, struct guild_storage *gstor); int (*create_party) (struct party_member *member, const char *name, int item, int item2); -- cgit v1.2.3-70-g09d2