Dmitry Timoshkov : schedsvc: Add support for running missed tasks at the service start.

Alexandre Julliard julliard at winehq.org
Mon Jun 11 13:10:49 CDT 2018


Module: wine
Branch: master
Commit: 8d540ec7cfebf12c088dc2733566d498dbee4977
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8d540ec7cfebf12c088dc2733566d498dbee4977

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Fri Jun  8 15:43:55 2018 +0800

schedsvc: Add support for running missed tasks at the service start.

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/schedsvc/atsvc.c            | 24 ++++++++++++++++++++++++
 dlls/schedsvc/schedsvc_private.h |  1 +
 dlls/schedsvc/svc_main.c         |  1 +
 3 files changed, 26 insertions(+)

diff --git a/dlls/schedsvc/atsvc.c b/dlls/schedsvc/atsvc.c
index b5b8317..f6ea0f0 100644
--- a/dlls/schedsvc/atsvc.c
+++ b/dlls/schedsvc/atsvc.c
@@ -1039,6 +1039,30 @@ void check_task_time(void)
     LeaveCriticalSection(&at_job_list_section);
 }
 
+void check_missed_task_time(void)
+{
+    FILETIME current_ft, last_ft;
+    struct job_t *job;
+
+    GetSystemTimeAsFileTime(&current_ft);
+    FileTimeToLocalFileTime(&current_ft, &current_ft);
+
+    EnterCriticalSection(&at_job_list_section);
+
+    LIST_FOR_EACH_ENTRY(job, &at_job_list, struct job_t, entry)
+    {
+        if (SystemTimeToFileTime(&job->data.last_runtime, &last_ft))
+        {
+            if (job_runs_at(job, &last_ft, &current_ft))
+            {
+                run_job(job);
+            }
+        }
+    }
+
+    LeaveCriticalSection(&at_job_list_section);
+}
+
 void remove_job(const WCHAR *name)
 {
     struct job_t *job;
diff --git a/dlls/schedsvc/schedsvc_private.h b/dlls/schedsvc/schedsvc_private.h
index 10892d5..117c6f5 100644
--- a/dlls/schedsvc/schedsvc_private.h
+++ b/dlls/schedsvc/schedsvc_private.h
@@ -31,6 +31,7 @@ void update_process_status(DWORD pid) DECLSPEC_HIDDEN;
 BOOL get_next_runtime(LARGE_INTEGER *rt) DECLSPEC_HIDDEN;
 void check_task_time(void) DECLSPEC_HIDDEN;
 void load_at_tasks(void) DECLSPEC_HIDDEN;
+void check_missed_task_time(void) DECLSPEC_HIDDEN;
 
 static inline WCHAR *heap_strdupW(const WCHAR *src)
 {
diff --git a/dlls/schedsvc/svc_main.c b/dlls/schedsvc/svc_main.c
index 2bba674..8e23a04 100644
--- a/dlls/schedsvc/svc_main.c
+++ b/dlls/schedsvc/svc_main.c
@@ -54,6 +54,7 @@ static DWORD WINAPI tasks_monitor_thread(void *arg)
     TRACE("Starting...\n");
 
     load_at_tasks();
+    check_missed_task_time();
 
     htimer = CreateWaitableTimerW(NULL, FALSE, NULL);
     if (htimer == NULL)




More information about the wine-cvs mailing list