diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-08-02 15:40:25 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-08-02 15:40:25 +0000 |
commit | 2898a10e8ec1df9afaa27ff1d0cb685fcb964720 (patch) | |
tree | 8cd3de8a740256d8d5afefa55206138ae4139bae /src/map/script.c | |
parent | eb941f3cf5b97d09faa34116e78648b7eaf6b2fb (diff) | |
download | hercules-2898a10e8ec1df9afaa27ff1d0cb685fcb964720.tar.gz hercules-2898a10e8ec1df9afaa27ff1d0cb685fcb964720.tar.bz2 hercules-2898a10e8ec1df9afaa27ff1d0cb685fcb964720.tar.xz hercules-2898a10e8ec1df9afaa27ff1d0cb685fcb964720.zip |
- Fixed script code data not being free'd if a player quits in the middle of a script.
- Modified run_script so that when there are leaks, it will report the place where run_script was called from as source rather than the inner code of run_script (for debugging purposes)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8057 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/script.c')
-rw-r--r-- | src/map/script.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/map/script.c b/src/map/script.c index b26cbf749..23bc4c505 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -2500,7 +2500,9 @@ int run_func(struct script_state *st) */ void run_script_main(struct script_state *st); -void run_script(struct script_code *rootscript,int pos,int rid,int oid) +//FIXME: Temporary replacement to locate the leak source. +//void run_script(struct script_code *rootscript,int pos,int rid,int oid) +void run_script_sub(struct script_code *rootscript,int pos,int rid,int oid, char* file, int lineno) { struct script_state *st; struct map_session_data *sd=NULL; @@ -2513,14 +2515,18 @@ void run_script(struct script_code *rootscript,int pos,int rid,int oid) //Resume script. st = sd->st; } else { - st = aCalloc(sizeof(struct script_state), 1); +// st = aCalloc(sizeof(struct script_state), 1); + st = _mcalloc(sizeof(struct script_state), 1, file, lineno, __func__); // the script is different, make new script_state and stack - st->stack = aMalloc (sizeof(struct script_stack)); +// st->stack = aMalloc (sizeof(struct script_stack)); + st->stack = _mmalloc(sizeof(struct script_stack), file, lineno, __func__); st->stack->sp=0; st->stack->sp_max=64; - st->stack->stack_data = (struct script_data *)aCalloc(st->stack->sp_max,sizeof(st->stack->stack_data[0])); +// st->stack->stack_data = (struct script_data *)aCalloc(st->stack->sp_max,sizeof(st->stack->stack_data[0])); + st->stack->stack_data = (struct script_data *)_mcalloc(st->stack->sp_max,sizeof(st->stack->stack_data[0]), file, lineno, __func__); st->stack->defsp = st->stack->sp; - st->stack->var_function = aCalloc(1, sizeof(struct linkdb_node*)); +// st->stack->var_function = aCalloc(1, sizeof(struct linkdb_node*)); + st->stack->var_function = _mcalloc(1, sizeof(struct linkdb_node*), file, lineno, __func__); st->state = RUN; st->script = rootscript; } |