Sebastian Lackner : server: Implement waiting for job objects.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 7 10:11:28 CDT 2015


Module: wine
Branch: master
Commit: a7247df6ca54fd1209eff9f9199447643ebdaec5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a7247df6ca54fd1209eff9f9199447643ebdaec5

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Fri Apr  3 17:20:35 2015 +1100

server: Implement waiting for job objects.

---

 dlls/kernel32/tests/process.c | 2 --
 server/process.c              | 7 ++++++-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index 0bd14dc..c63d6b1 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -2469,7 +2469,6 @@ static void test_WaitForJobObject(void)
     ok(ret, "TerminateJobObject error %u\n", GetLastError());
 
     dwret = WaitForSingleObject(job, 500);
-    todo_wine
     ok(dwret == WAIT_OBJECT_0 || broken(dwret == WAIT_TIMEOUT),
        "WaitForSingleObject returned %u\n", dwret);
 
@@ -2478,7 +2477,6 @@ static void test_WaitForJobObject(void)
         CloseHandle(pi.hProcess);
         CloseHandle(pi.hThread);
         CloseHandle(job);
-        todo_wine
         win_skip("TerminateJobObject doesn't signal job, skipping tests\n");
         return;
     }
diff --git a/server/process.c b/server/process.c
index d912739..569a8fe 100644
--- a/server/process.c
+++ b/server/process.c
@@ -149,6 +149,7 @@ struct job
     int num_processes;             /* count of running processes */
     unsigned int limit_flags;      /* limit flags */
     int terminating;               /* job is terminating */
+    int signaled;                  /* job is signaled */
     struct completion *completion_port; /* associated completion port */
     apc_param_t completion_key;    /* key to send with completion messages */
 };
@@ -191,6 +192,7 @@ static struct job *create_job_object( struct directory *root, const struct unico
             job->num_processes = 0;
             job->limit_flags = 0;
             job->terminating = 0;
+            job->signaled = 0;
             job->completion_port = NULL;
             job->completion_key = 0;
         }
@@ -281,6 +283,8 @@ static void terminate_job( struct job *job, int exit_code )
     }
 
     job->terminating = 0;
+    job->signaled = 1;
+    wake_up( &job->obj, 0 );
 }
 
 static void job_destroy( struct object *obj )
@@ -303,7 +307,8 @@ static void job_dump( struct object *obj, int verbose )
 
 static int job_signaled( struct object *obj, struct wait_queue_entry *entry )
 {
-    return 0;
+    struct job *job = (struct job *)obj;
+    return job->signaled;
 }
 
 struct ptid_entry




More information about the wine-cvs mailing list