diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-08-01 20:46:25 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-08-01 20:46:25 +0200 |
commit | 8dd3a43d75550e9b5736066124c97697564f769e (patch) | |
tree | 5768a06605c7ffaacfbb8aa385060cc7be223fec /src/structs.h | |
parent | ba96e9af388804364425185b47eed14988302865 (diff) | |
download | vim-git-8dd3a43d75550e9b5736066124c97697564f769e.tar.gz |
patch 7.4.2142v7.4.2142
Problem: Leaking memory when redefining a function.
Solution: Don't increment the function reference count when it's found by
name. Don't remove the wrong function from the hashtab. More
reference counting fixes.
Diffstat (limited to 'src/structs.h')
-rw-r--r-- | src/structs.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/structs.h b/src/structs.h index a8b85f479..543974828 100644 --- a/src/structs.h +++ b/src/structs.h @@ -1327,7 +1327,7 @@ typedef struct #endif scid_T uf_script_ID; /* ID of script where function was defined, used for s: variables */ - int uf_refcount; /* for numbered function: reference count */ + int uf_refcount; /* reference count, see func_name_refcount() */ funccall_T *uf_scoped; /* l: local variables for closure */ char_u uf_name[1]; /* name of function (actually longer); can start with <SNR>123_ (<SNR> is K_SPECIAL @@ -1365,9 +1365,11 @@ struct funccall_S funccall_T *caller; /* calling function or NULL */ /* for closure */ - int fc_refcount; + int fc_refcount; /* number of user functions that reference this + * funccal */ int fc_copyID; /* for garbage collection */ - garray_T fc_funcs; /* list of ufunc_T* which refer this */ + garray_T fc_funcs; /* list of ufunc_T* which keep a reference to + * "func" */ }; /* |