diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-06-28 18:09:13 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-06-28 18:09:13 +0300 |
commit | 8cf325640e316aff125deeff3d2880bb342d00c9 (patch) | |
tree | 2f5aabe104fcba2a36022a098a839ff04f6c2b36 | |
parent | f68e125478e7b74fdc7e9c272449ae0c5c227d1c (diff) | |
download | plugin-8cf325640e316aff125deeff3d2880bb342d00c9.tar.gz plugin-8cf325640e316aff125deeff3d2880bb342d00c9.tar.bz2 plugin-8cf325640e316aff125deeff3d2880bb342d00c9.tar.xz plugin-8cf325640e316aff125deeff3d2880bb342d00c9.zip |
Fix memory leak if npc change class.s20160630
-rw-r--r-- | src/emap/init.c | 1 | ||||
-rw-r--r-- | src/emap/status.c | 11 | ||||
-rw-r--r-- | src/emap/status.h | 2 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/emap/init.c b/src/emap/init.c index a355e2b..0882db6 100644 --- a/src/emap/init.c +++ b/src/emap/init.c @@ -252,6 +252,7 @@ HPExport void plugin_init (void) addHookPre(script, load_parameters, escript_load_parameters_pre); addHookPre(script, hardcoded_constants, escript_hardcoded_constants_pre); addHookPre(status, calc_pc_additional, estatus_calc_pc_additional_pre); + addHookPre(status, set_viewdata, estatus_set_viewdata_pre); addHookPost(clif, addcards, eclif_addcards_post); addHookPost(clif, addcards2, eclif_addcards2_post); diff --git a/src/emap/status.c b/src/emap/status.c index 1b27a0f..13592b5 100644 --- a/src/emap/status.c +++ b/src/emap/status.c @@ -39,6 +39,17 @@ void status_init(void) class_move_speed[f] = 150; } +void estatus_set_viewdata_pre(struct block_list **blPtr, + int *classPtr_ __attribute__ ((unused))) +{ + struct block_list *bl = *blPtr; + if (bl->type != BL_NPC) + return; + TBL_NPC *const npc = (TBL_NPC*)bl; + aFree(npc->vd); + npc->vd = NULL; +} + void estatus_set_viewdata_post(struct block_list *bl, int class_ __attribute__ ((unused))) { diff --git a/src/emap/status.h b/src/emap/status.h index fce6c83..62bbec7 100644 --- a/src/emap/status.h +++ b/src/emap/status.h @@ -5,6 +5,8 @@ #define EVOL_MAP_STATUS void status_init(void); +void estatus_set_viewdata_pre(struct block_list **blPtr, + int *classPtr_ __attribute__ ((unused))); void estatus_set_viewdata_post(struct block_list *bl, int class_); void estatus_read_job_db_sub_post(int idx, |