server: Implement waiting for job objects.
This commit is contained in:
parent
7984fb9fbe
commit
a7247df6ca
|
@ -2469,7 +2469,6 @@ static void test_WaitForJobObject(void)
|
||||||
ok(ret, "TerminateJobObject error %u\n", GetLastError());
|
ok(ret, "TerminateJobObject error %u\n", GetLastError());
|
||||||
|
|
||||||
dwret = WaitForSingleObject(job, 500);
|
dwret = WaitForSingleObject(job, 500);
|
||||||
todo_wine
|
|
||||||
ok(dwret == WAIT_OBJECT_0 || broken(dwret == WAIT_TIMEOUT),
|
ok(dwret == WAIT_OBJECT_0 || broken(dwret == WAIT_TIMEOUT),
|
||||||
"WaitForSingleObject returned %u\n", dwret);
|
"WaitForSingleObject returned %u\n", dwret);
|
||||||
|
|
||||||
|
@ -2478,7 +2477,6 @@ static void test_WaitForJobObject(void)
|
||||||
CloseHandle(pi.hProcess);
|
CloseHandle(pi.hProcess);
|
||||||
CloseHandle(pi.hThread);
|
CloseHandle(pi.hThread);
|
||||||
CloseHandle(job);
|
CloseHandle(job);
|
||||||
todo_wine
|
|
||||||
win_skip("TerminateJobObject doesn't signal job, skipping tests\n");
|
win_skip("TerminateJobObject doesn't signal job, skipping tests\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,6 +149,7 @@ struct job
|
||||||
int num_processes; /* count of running processes */
|
int num_processes; /* count of running processes */
|
||||||
unsigned int limit_flags; /* limit flags */
|
unsigned int limit_flags; /* limit flags */
|
||||||
int terminating; /* job is terminating */
|
int terminating; /* job is terminating */
|
||||||
|
int signaled; /* job is signaled */
|
||||||
struct completion *completion_port; /* associated completion port */
|
struct completion *completion_port; /* associated completion port */
|
||||||
apc_param_t completion_key; /* key to send with completion messages */
|
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->num_processes = 0;
|
||||||
job->limit_flags = 0;
|
job->limit_flags = 0;
|
||||||
job->terminating = 0;
|
job->terminating = 0;
|
||||||
|
job->signaled = 0;
|
||||||
job->completion_port = NULL;
|
job->completion_port = NULL;
|
||||||
job->completion_key = 0;
|
job->completion_key = 0;
|
||||||
}
|
}
|
||||||
|
@ -281,6 +283,8 @@ static void terminate_job( struct job *job, int exit_code )
|
||||||
}
|
}
|
||||||
|
|
||||||
job->terminating = 0;
|
job->terminating = 0;
|
||||||
|
job->signaled = 1;
|
||||||
|
wake_up( &job->obj, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void job_destroy( struct object *obj )
|
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 )
|
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
|
struct ptid_entry
|
||||||
|
|
Loading…
Reference in New Issue