summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-07-30 22:47:56 +0200
committerBram Moolenaar <Bram@vim.org>2016-07-30 22:47:56 +0200
commit623e263ffb998acacd6fd0de18c44e03af2a47d1 (patch)
treed9db8377e5c762b97f715af27f115445f3a999c7
parent3ab14355ed93958433eec58e96ec9bd9a472f2b2 (diff)
downloadvim-git-623e263ffb998acacd6fd0de18c44e03af2a47d1.tar.gz
patch 7.4.2130v7.4.2130
Problem: Pending timers cause false memory leak reports. Solution: Free all timers on exit.
-rw-r--r--src/ex_cmds2.c15
-rw-r--r--src/misc2.c3
-rw-r--r--src/proto/ex_cmds2.pro3
-rw-r--r--src/version.c2
4 files changed, 22 insertions, 1 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index ec9f50a52..2cebbebca 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1279,6 +1279,21 @@ set_ref_in_timer(int copyID)
}
return abort;
}
+
+# if defined(EXITFREE) || defined(PROTO)
+ void
+timer_free_all()
+{
+ timer_T *timer;
+
+ while (first_timer != NULL)
+ {
+ timer = first_timer;
+ remove_timer(timer);
+ free_timer(timer);
+ }
+}
+# endif
# endif
#if defined(FEAT_SYN_HL) && defined(FEAT_RELTIME) && defined(FEAT_FLOAT)
diff --git a/src/misc2.c b/src/misc2.c
index 281f4af1a..53469a261 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1224,6 +1224,9 @@ free_all_mem(void)
channel_free_all();
job_free_all();
# endif
+#ifdef FEAT_TIMERS
+ timer_free_all();
+#endif
free_termoptions();
diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro
index 8d9b72a24..c7a860b9f 100644
--- a/src/proto/ex_cmds2.pro
+++ b/src/proto/ex_cmds2.pro
@@ -18,11 +18,12 @@ float_T profile_float(proftime_T *tm);
void profile_setlimit(long msec, proftime_T *tm);
int profile_passed_limit(proftime_T *tm);
void profile_zero(proftime_T *tm);
-timer_T *create_timer(long msec, int repeats);
+timer_T *create_timer(long msec, int repeat);
long check_due_timer(void);
timer_T *find_timer(int id);
void stop_timer(timer_T *timer);
int set_ref_in_timer(int copyID);
+void timer_free_all(void);
void profile_divide(proftime_T *tm, int count, proftime_T *tm2);
void profile_add(proftime_T *tm, proftime_T *tm2);
void profile_self(proftime_T *self, proftime_T *total, proftime_T *children);
diff --git a/src/version.c b/src/version.c
index 90953555f..77a43c1be 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2130,
+/**/
2129,
/**/
2128,