mshtml: Allow timers to be cleaned during processing.
This commit is contained in:
parent
8e8d63933b
commit
1de0055cc0
|
@ -128,6 +128,8 @@ static BOOL queue_timer(thread_data_t *thread_data, task_timer_t *timer)
|
||||||
{
|
{
|
||||||
task_timer_t *iter;
|
task_timer_t *iter;
|
||||||
|
|
||||||
|
list_remove(&timer->entry);
|
||||||
|
|
||||||
if(list_empty(&thread_data->timer_list)
|
if(list_empty(&thread_data->timer_list)
|
||||||
|| LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry)->time > timer->time) {
|
|| LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry)->time > timer->time) {
|
||||||
|
|
||||||
|
@ -159,6 +161,7 @@ DWORD set_task_timer(HTMLDocument *doc, DWORD msec, BOOL interval, IDispatch *di
|
||||||
timer->doc = doc;
|
timer->doc = doc;
|
||||||
timer->time = tc + msec;
|
timer->time = tc + msec;
|
||||||
timer->interval = interval ? msec : 0;
|
timer->interval = interval ? msec : 0;
|
||||||
|
list_init(&timer->entry);
|
||||||
|
|
||||||
IDispatch_AddRef(disp);
|
IDispatch_AddRef(disp);
|
||||||
timer->disp = disp;
|
timer->disp = disp;
|
||||||
|
@ -363,6 +366,8 @@ static void process_task(task_t *task)
|
||||||
static LRESULT process_timer(void)
|
static LRESULT process_timer(void)
|
||||||
{
|
{
|
||||||
thread_data_t *thread_data = get_thread_data(TRUE);
|
thread_data_t *thread_data = get_thread_data(TRUE);
|
||||||
|
HTMLDocument *doc;
|
||||||
|
IDispatch *disp;
|
||||||
DWORD tc;
|
DWORD tc;
|
||||||
task_timer_t *timer;
|
task_timer_t *timer;
|
||||||
|
|
||||||
|
@ -377,10 +382,9 @@ static LRESULT process_timer(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_remove(&timer->entry);
|
doc = timer->doc;
|
||||||
list_init(&timer->entry);
|
disp = timer->disp;
|
||||||
|
IDispatch_AddRef(disp);
|
||||||
call_disp_func(timer->doc, timer->disp);
|
|
||||||
|
|
||||||
if(timer->interval) {
|
if(timer->interval) {
|
||||||
timer->time += timer->interval;
|
timer->time += timer->interval;
|
||||||
|
@ -388,6 +392,10 @@ static LRESULT process_timer(void)
|
||||||
}else {
|
}else {
|
||||||
release_task_timer(thread_data->thread_hwnd, timer);
|
release_task_timer(thread_data->thread_hwnd, timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
call_disp_func(doc, disp);
|
||||||
|
|
||||||
|
IDispatch_Release(disp);
|
||||||
}
|
}
|
||||||
|
|
||||||
KillTimer(thread_data->thread_hwnd, TIMER_ID);
|
KillTimer(thread_data->thread_hwnd, TIMER_ID);
|
||||||
|
|
Loading…
Reference in New Issue