summaryrefslogtreecommitdiff
path: root/src/map/map.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-04-18 14:39:11 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-04-18 14:39:11 +0000
commit55af5ea9f16c710fd5c1685aeab5203098bd598c (patch)
tree01c6cfde7d32a4dd6e9f85c7f3348ad4e2148dea /src/map/map.c
parent42c06c98c7df72f47c7dde05c6c375ce74f41cc2 (diff)
downloadhercules-55af5ea9f16c710fd5c1685aeab5203098bd598c.tar.gz
hercules-55af5ea9f16c710fd5c1685aeab5203098bd598c.tar.bz2
hercules-55af5ea9f16c710fd5c1685aeab5203098bd598c.tar.xz
hercules-55af5ea9f16c710fd5c1685aeab5203098bd598c.zip
- Some more cleanups that should prevent the double-login issue even further.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@10286 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/map.c')
-rw-r--r--src/map/map.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/map/map.c b/src/map/map.c
index 37a6f1d91..169d038af 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -1672,11 +1672,15 @@ void map_deliddb(struct block_list *bl) {
int map_quit(struct map_session_data *sd) {
if(!sd->state.auth) { //Removing a player that hasn't even finished loading
+ TBL_PC *sd2 = map_id2sd(sd->status.account_id);
if (sd->pd) unit_free(&sd->pd->bl,-1);
if (sd->hd) unit_free(&sd->hd->bl,-1);
+ //Double login, let original do the cleanups below.
+ if (sd2 && sd2 != sd)
+ return 0;
+ idb_remove(id_db,sd->bl.id);
idb_remove(pc_db,sd->status.account_id);
idb_remove(charid_db,sd->status.char_id);
- idb_remove(id_db,sd->bl.id);
return 0;
}
if(!sd->state.waitingdisconnect) {
@@ -1692,13 +1696,11 @@ int map_quit(struct map_session_data *sd) {
chrif_save(sd,1);
} else { //Try to free some data, without saving anything (this could be invoked on map server change. [Skotlex]
if (sd->bl.prev != NULL)
- { //Remove from map...
unit_remove_map(&sd->bl, 0);
- if (sd->pd && sd->pd->bl.prev != NULL)
- unit_remove_map(&sd->pd->bl, 0);
- if (sd->hd && sd->hd->bl.prev != NULL)
- unit_remove_map(&sd->hd->bl, 0);
- }
+ if (sd->pd && sd->pd->bl.prev != NULL)
+ unit_remove_map(&sd->pd->bl, 0);
+ if (sd->hd && sd->hd->bl.prev != NULL)
+ unit_remove_map(&sd->hd->bl, 0);
}
//Do we really need to remove the name?