Module: wine Branch: master Commit: 94fcaad7033163d76134f6b85be30a9e383350a9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=94fcaad7033163d76134f6b85b...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Dec 24 13:09:59 2014 +0100
mshtml: Use standard list to store task queue.
---
dlls/mshtml/mshtml_private.h | 5 ++--- dlls/mshtml/task.c | 38 +++++++++++--------------------------- 2 files changed, 13 insertions(+), 30 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 8529231..5553bf2 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1018,7 +1018,7 @@ struct task_t { LONG target_magic; task_proc_t proc; task_proc_t destr; - struct task_t *next; + struct list entry; };
typedef struct { @@ -1028,8 +1028,7 @@ typedef struct {
typedef struct { HWND thread_hwnd; - task_t *task_queue_head; - task_t *task_queue_tail; + struct list task_list; struct list timer_list; } thread_data_t;
diff --git a/dlls/mshtml/task.c b/dlls/mshtml/task.c index 6baac63..d0c888f 100644 --- a/dlls/mshtml/task.c +++ b/dlls/mshtml/task.c @@ -69,14 +69,8 @@ HRESULT push_task(task_t *task, task_proc_t proc, task_proc_t destr, LONG magic) task->target_magic = magic; task->proc = proc; task->destr = destr ? destr : default_task_destr; - task->next = NULL;
- if(thread_data->task_queue_tail) - thread_data->task_queue_tail->next = task; - else - thread_data->task_queue_head = task; - - thread_data->task_queue_tail = task; + list_add_tail(&thread_data->task_list, &task->entry);
PostMessageW(thread_data->thread_hwnd, WM_PROCESSTASK, 0, 0); return S_OK; @@ -91,14 +85,11 @@ static task_t *pop_task(void) if(!thread_data) return NULL;
- task = thread_data->task_queue_head; - if(!task) + if(list_empty(&thread_data->task_list)) return NULL;
- thread_data->task_queue_head = task->next; - if(!thread_data->task_queue_head) - thread_data->task_queue_tail = NULL; - + task = LIST_ENTRY(thread_data->task_list.next, task_t, entry); + list_remove(&task->entry); return task; }
@@ -116,7 +107,7 @@ void remove_target_tasks(LONG target) thread_data_t *thread_data = get_thread_data(FALSE); struct list *liter, *ltmp; task_timer_t *timer; - task_t *iter, *tmp; + task_t *task;
if(!thread_data) return; @@ -134,20 +125,12 @@ void remove_target_tasks(LONG target) SetTimer(thread_data->thread_hwnd, TIMER_ID, max( (int)(timer->time - tc), 0 ), NULL); }
- while(thread_data->task_queue_head && thread_data->task_queue_head->target_magic == target) { - iter = pop_task(); - iter->destr(iter); - } - - for(iter = thread_data->task_queue_head; iter; iter = iter->next) { - while(iter->next && iter->next->target_magic == target) { - tmp = iter->next; - iter->next = tmp->next; - tmp->destr(tmp); + LIST_FOR_EACH_SAFE(liter, ltmp, &thread_data->task_list) { + task = LIST_ENTRY(liter, task_t, entry); + if(task->target_magic == target) { + list_remove(&task->entry); + task->destr(task); } - - if(!iter->next) - thread_data->task_queue_tail = iter; } }
@@ -390,6 +373,7 @@ thread_data_t *get_thread_data(BOOL create) return NULL;
TlsSetValue(mshtml_tls, thread_data); + list_init(&thread_data->task_list); list_init(&thread_data->timer_list); }