[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-patches
Subject:    [7/8] server: Implement waiting for job objects.
From:       Andrew Cook <ariscop () gmail ! com>
Date:       2015-02-28 5:58:48
Message-ID: 1427756281.24235.6.camel () andrews-laptop
[Download RAW message or body]

From: Sebastian Lackner <sebastian@fds-team.de>

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


["0007-server-Implement-waiting-for-job-objects.patch" (text/x-patch)]

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index 10abd30..b31a13f 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -2454,7 +2454,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);
 
@@ -2463,7 +2462,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 053ff84..0f316e5 100644
--- a/server/process.c
+++ b/server/process.c
@@ -150,6 +150,7 @@ struct job
     int num_processes;             /* count of running processes */
     int limit_flags;               /* limit flags */
     int terminating;               /* job is terminating */
+    int signaled;                  /* job is signaled */
     struct completion *completion_port;
     apc_param_t completion_key;
 };
@@ -192,6 +193,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;
         }
@@ -289,6 +291,8 @@ static void terminate_job( struct job *job, int exit_code )
     }
 
     job->terminating = 0;
+    job->signaled = 1;
+    wake_up( &job->obj, 0 );
 }
 
 static int job_close_handle( struct object *obj, struct process *process, obj_handle_t handle )
@@ -326,7 +330,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




[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic