Module: wine Branch: master Commit: 1980834c7d7ee3eb32fa9ece20673d9c39a74b0c URL: http://source.winehq.org/git/wine.git/?a=commit;h=1980834c7d7ee3eb32fa9ece20...
Author: Sebastian Lackner sebastian@fds-team.de Date: Mon Dec 21 05:18:50 2015 +0100
ntdll: ProcessDebugFlags should return debug_children flag instead of !debugger_present.
Signed-off-by: Sebastian Lackner sebastian@fds-team.de Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/process.c | 2 +- dlls/ntdll/tests/info.c | 12 ++---------- include/wine/server_protocol.h | 5 +++-- server/debugger.c | 2 +- server/process.c | 5 +++-- server/protocol.def | 3 ++- server/request.h | 1 + server/trace.c | 1 + 8 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c index ca9462a..5a5c3ef 100644 --- a/dlls/ntdll/process.c +++ b/dlls/ntdll/process.c @@ -339,7 +339,7 @@ NTSTATUS WINAPI NtQueryInformationProcess( req->handle = wine_server_obj_handle( ProcessHandle ); if ((ret = wine_server_call( req )) == STATUS_SUCCESS) { - *(DWORD *)ProcessInformation = !reply->debugger_present; + *(DWORD *)ProcessInformation = reply->debug_children; } } SERVER_END_REQ; diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index 88d0417..a521447 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -1345,11 +1345,7 @@ static void test_query_process_debug_flags(int argc, char **argv) status = pNtQueryInformationProcess(pi.hProcess, ProcessDebugFlags, &debug_flags, sizeof(debug_flags), NULL); ok(!status, "NtQueryInformationProcess failed, status %#x.\n", status); - if (!expected_flags) - ok(debug_flags == expected_flags, "Expected flag %x, got %x.\n", expected_flags, debug_flags); - else - todo_wine - ok(debug_flags == expected_flags, "Expected flag %x, got %x.\n", expected_flags, debug_flags); + ok(debug_flags == expected_flags, "Expected flag %x, got %x.\n", expected_flags, debug_flags);
if (!(test_flags[i] & CREATE_SUSPENDED)) { @@ -1379,11 +1375,7 @@ static void test_query_process_debug_flags(int argc, char **argv) status = pNtQueryInformationProcess(pi.hProcess, ProcessDebugFlags, &debug_flags, sizeof(debug_flags), NULL); ok(!status, "NtQueryInformationProcess failed, status %#x.\n", status); - if (expected_flags) - ok(debug_flags == expected_flags, "Expected flag %x, got %x.\n", expected_flags, debug_flags); - else - todo_wine - ok(debug_flags == expected_flags, "Expected flag %x, got %x.\n", expected_flags, debug_flags); + ok(debug_flags == expected_flags, "Expected flag %x, got %x.\n", expected_flags, debug_flags);
ret = DebugActiveProcess(pi.dwProcessId); ok(ret, "DebugActiveProcess failed, last error %#x.\n", GetLastError()); diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 4e33260..f0dc65a 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -857,7 +857,8 @@ struct get_process_info_reply int exit_code; int priority; cpu_type_t cpu; - int debugger_present; + short int debugger_present; + short int debug_children; };
@@ -6153,6 +6154,6 @@ union generic_reply struct terminate_job_reply terminate_job_reply; };
-#define SERVER_PROTOCOL_VERSION 490 +#define SERVER_PROTOCOL_VERSION 491
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/debugger.c b/server/debugger.c index 374f2ad..810e8d3 100644 --- a/server/debugger.c +++ b/server/debugger.c @@ -443,6 +443,7 @@ static int debugger_attach( struct process *process, struct thread *debugger ) resume_process( process ); return 0; } + process->debug_children = 0; return 1;
error: @@ -483,7 +484,6 @@ int debugger_detach( struct process *process, struct thread *debugger )
/* remove relationships between process and its debugger */ process->debugger = NULL; - process->debug_children = 0; if (!set_process_debug_flag( process, 0 )) clear_error(); /* ignore error */
/* from this function */ diff --git a/server/process.c b/server/process.c index e00b429..8433002 100644 --- a/server/process.c +++ b/server/process.c @@ -513,7 +513,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit process->priority = PROCESS_PRIOCLASS_NORMAL; process->suspend = 0; process->is_system = 0; - process->debug_children = 0; + process->debug_children = 1; process->is_terminating = 0; process->job = NULL; process->console = NULL; @@ -1228,7 +1228,7 @@ DECL_HANDLER(new_process) else if (parent->debugger && parent->debug_children) { set_process_debugger( process, parent->debugger ); - process->debug_children = 1; + /* debug_children is set to 1 by default */ }
if (!(req->create_flags & CREATE_NEW_PROCESS_GROUP)) @@ -1359,6 +1359,7 @@ DECL_HANDLER(get_process_info) reply->end_time = process->end_time; reply->cpu = process->cpu; reply->debugger_present = !!process->debugger; + reply->debug_children = process->debug_children; release_object( process ); } } diff --git a/server/protocol.def b/server/protocol.def index 04814c9..bfb9089 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -818,7 +818,8 @@ struct rawinput_device int exit_code; /* process exit code */ int priority; /* priority class */ cpu_type_t cpu; /* CPU that this process is running on */ - int debugger_present; /* process is being debugged */ + short int debugger_present; /* process is being debugged */ + short int debug_children; /* inherit debugger to child processes */ @END
diff --git a/server/request.h b/server/request.h index 48f4d46..9653f0c 100644 --- a/server/request.h +++ b/server/request.h @@ -760,6 +760,7 @@ C_ASSERT( FIELD_OFFSET(struct get_process_info_reply, exit_code) == 48 ); C_ASSERT( FIELD_OFFSET(struct get_process_info_reply, priority) == 52 ); C_ASSERT( FIELD_OFFSET(struct get_process_info_reply, cpu) == 56 ); C_ASSERT( FIELD_OFFSET(struct get_process_info_reply, debugger_present) == 60 ); +C_ASSERT( FIELD_OFFSET(struct get_process_info_reply, debug_children) == 62 ); C_ASSERT( sizeof(struct get_process_info_reply) == 64 ); C_ASSERT( FIELD_OFFSET(struct set_process_info_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct set_process_info_request, mask) == 16 ); diff --git a/server/trace.c b/server/trace.c index 4ec7aad..405a1c9 100644 --- a/server/trace.c +++ b/server/trace.c @@ -1279,6 +1279,7 @@ static void dump_get_process_info_reply( const struct get_process_info_reply *re fprintf( stderr, ", priority=%d", req->priority ); dump_cpu_type( ", cpu=", &req->cpu ); fprintf( stderr, ", debugger_present=%d", req->debugger_present ); + fprintf( stderr, ", debug_children=%d", req->debug_children ); }
static void dump_set_process_info_request( const struct set_process_info_request *req )