diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-04-18 14:39:11 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-04-18 14:39:11 +0000 |
commit | 55af5ea9f16c710fd5c1685aeab5203098bd598c (patch) | |
tree | 01c6cfde7d32a4dd6e9f85c7f3348ad4e2148dea /src/map/map.c | |
parent | 42c06c98c7df72f47c7dde05c6c375ce74f41cc2 (diff) | |
download | hercules-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.c | 16 |
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? |