patch 7.4.2332
Problem: Crash when stop_timer() is called in a callback of a callback.
Vim hangs when the timer callback uses too much time.
Solution: Set tr_id to -1 when a timer is to be deleted. Don't keep calling
callbacks forever. (Ozaki Kiichi)
diff --git a/src/structs.h b/src/structs.h
index a44bcec..8bdd3c9 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -3166,12 +3166,13 @@
typedef struct timer_S timer_T;
struct timer_S
{
- int tr_id;
+ long tr_id;
#ifdef FEAT_TIMERS
timer_T *tr_next;
timer_T *tr_prev;
proftime_T tr_due; /* when the callback is to be invoked */
- int tr_paused; /* when TRUE callback is not invoked */
+ char tr_firing; /* when TRUE callback is being called */
+ char tr_paused; /* when TRUE callback is not invoked */
int tr_repeat; /* number of times to repeat, -1 forever */
long tr_interval; /* msec */
char_u *tr_callback; /* allocated */