Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
6156cf31
Commit
6156cf31
authored
Jul 27, 2015
by
Sebastian Lackner
Committed by
Alexandre Julliard
Jul 29, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Use a separate wineserver call to fetch thread times.
parent
b6a095b9
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
68 additions
and
19 deletions
+68
-19
thread.c
dlls/ntdll/thread.c
+2
-4
server_protocol.h
include/wine/server_protocol.h
+19
-4
protocol.def
server/protocol.def
+9
-2
request.h
server/request.h
+11
-6
thread.c
server/thread.c
+13
-1
trace.c
server/trace.c
+14
-2
No files found.
dlls/ntdll/thread.c
View file @
6156cf31
...
@@ -962,12 +962,10 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class,
...
@@ -962,12 +962,10 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class,
case
ThreadTimes
:
case
ThreadTimes
:
{
{
KERNEL_USER_TIMES
kusrt
;
KERNEL_USER_TIMES
kusrt
;
/* We need to do a server call to get the creation time or exit time */
/* This works on any thread */
SERVER_START_REQ
(
get_thread_times
)
SERVER_START_REQ
(
get_thread_info
)
{
{
req
->
handle
=
wine_server_obj_handle
(
handle
);
req
->
handle
=
wine_server_obj_handle
(
handle
);
req
->
tid_in
=
0
;
status
=
wine_server_call
(
req
);
status
=
wine_server_call
(
req
);
if
(
status
==
STATUS_SUCCESS
)
if
(
status
==
STATUS_SUCCESS
)
{
{
...
...
include/wine/server_protocol.h
View file @
6156cf31
...
@@ -893,12 +893,24 @@ struct get_thread_info_reply
...
@@ -893,12 +893,24 @@ struct get_thread_info_reply
thread_id_t
tid
;
thread_id_t
tid
;
client_ptr_t
teb
;
client_ptr_t
teb
;
affinity_t
affinity
;
affinity_t
affinity
;
timeout_t
creation_time
;
timeout_t
exit_time
;
int
exit_code
;
int
exit_code
;
int
priority
;
int
priority
;
int
last
;
int
last
;
char
__pad_60
[
4
];
char
__pad_44
[
4
];
};
struct
get_thread_times_request
{
struct
request_header
__header
;
obj_handle_t
handle
;
};
struct
get_thread_times_reply
{
struct
reply_header
__header
;
timeout_t
creation_time
;
timeout_t
exit_time
;
};
};
...
@@ -5295,6 +5307,7 @@ enum request
...
@@ -5295,6 +5307,7 @@ enum request
REQ_get_process_info
,
REQ_get_process_info
,
REQ_set_process_info
,
REQ_set_process_info
,
REQ_get_thread_info
,
REQ_get_thread_info
,
REQ_get_thread_times
,
REQ_set_thread_info
,
REQ_set_thread_info
,
REQ_get_dll_info
,
REQ_get_dll_info
,
REQ_suspend_thread
,
REQ_suspend_thread
,
...
@@ -5568,6 +5581,7 @@ union generic_request
...
@@ -5568,6 +5581,7 @@ union generic_request
struct
get_process_info_request
get_process_info_request
;
struct
get_process_info_request
get_process_info_request
;
struct
set_process_info_request
set_process_info_request
;
struct
set_process_info_request
set_process_info_request
;
struct
get_thread_info_request
get_thread_info_request
;
struct
get_thread_info_request
get_thread_info_request
;
struct
get_thread_times_request
get_thread_times_request
;
struct
set_thread_info_request
set_thread_info_request
;
struct
set_thread_info_request
set_thread_info_request
;
struct
get_dll_info_request
get_dll_info_request
;
struct
get_dll_info_request
get_dll_info_request
;
struct
suspend_thread_request
suspend_thread_request
;
struct
suspend_thread_request
suspend_thread_request
;
...
@@ -5839,6 +5853,7 @@ union generic_reply
...
@@ -5839,6 +5853,7 @@ union generic_reply
struct
get_process_info_reply
get_process_info_reply
;
struct
get_process_info_reply
get_process_info_reply
;
struct
set_process_info_reply
set_process_info_reply
;
struct
set_process_info_reply
set_process_info_reply
;
struct
get_thread_info_reply
get_thread_info_reply
;
struct
get_thread_info_reply
get_thread_info_reply
;
struct
get_thread_times_reply
get_thread_times_reply
;
struct
set_thread_info_reply
set_thread_info_reply
;
struct
set_thread_info_reply
set_thread_info_reply
;
struct
get_dll_info_reply
get_dll_info_reply
;
struct
get_dll_info_reply
get_dll_info_reply
;
struct
suspend_thread_reply
suspend_thread_reply
;
struct
suspend_thread_reply
suspend_thread_reply
;
...
@@ -6096,6 +6111,6 @@ union generic_reply
...
@@ -6096,6 +6111,6 @@ union generic_reply
struct
terminate_job_reply
terminate_job_reply
;
struct
terminate_job_reply
terminate_job_reply
;
};
};
#define SERVER_PROTOCOL_VERSION 48
1
#define SERVER_PROTOCOL_VERSION 48
2
#endif
/* __WINE_WINE_SERVER_PROTOCOL_H */
#endif
/* __WINE_WINE_SERVER_PROTOCOL_H */
server/protocol.def
View file @
6156cf31
...
@@ -842,14 +842,21 @@ struct rawinput_device
...
@@ -842,14 +842,21 @@ struct rawinput_device
thread_id_t tid; /* server thread id */
thread_id_t tid; /* server thread id */
client_ptr_t teb; /* thread teb pointer */
client_ptr_t teb; /* thread teb pointer */
affinity_t affinity; /* thread affinity mask */
affinity_t affinity; /* thread affinity mask */
timeout_t creation_time; /* thread creation time */
timeout_t exit_time; /* thread exit time */
int exit_code; /* thread exit code */
int exit_code; /* thread exit code */
int priority; /* thread priority level */
int priority; /* thread priority level */
int last; /* last thread in process */
int last; /* last thread in process */
@END
@END
/* Retrieve information about thread times */
@REQ(get_thread_times)
obj_handle_t handle; /* thread handle */
@REPLY
timeout_t creation_time; /* thread creation time */
timeout_t exit_time; /* thread exit time */
@END
/* Set a thread information */
/* Set a thread information */
@REQ(set_thread_info)
@REQ(set_thread_info)
obj_handle_t handle; /* thread handle */
obj_handle_t handle; /* thread handle */
...
...
server/request.h
View file @
6156cf31
...
@@ -117,6 +117,7 @@ DECL_HANDLER(terminate_thread);
...
@@ -117,6 +117,7 @@ DECL_HANDLER(terminate_thread);
DECL_HANDLER
(
get_process_info
);
DECL_HANDLER
(
get_process_info
);
DECL_HANDLER
(
set_process_info
);
DECL_HANDLER
(
set_process_info
);
DECL_HANDLER
(
get_thread_info
);
DECL_HANDLER
(
get_thread_info
);
DECL_HANDLER
(
get_thread_times
);
DECL_HANDLER
(
set_thread_info
);
DECL_HANDLER
(
set_thread_info
);
DECL_HANDLER
(
get_dll_info
);
DECL_HANDLER
(
get_dll_info
);
DECL_HANDLER
(
suspend_thread
);
DECL_HANDLER
(
suspend_thread
);
...
@@ -389,6 +390,7 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
...
@@ -389,6 +390,7 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
(
req_handler
)
req_get_process_info
,
(
req_handler
)
req_get_process_info
,
(
req_handler
)
req_set_process_info
,
(
req_handler
)
req_set_process_info
,
(
req_handler
)
req_get_thread_info
,
(
req_handler
)
req_get_thread_info
,
(
req_handler
)
req_get_thread_times
,
(
req_handler
)
req_set_thread_info
,
(
req_handler
)
req_set_thread_info
,
(
req_handler
)
req_get_dll_info
,
(
req_handler
)
req_get_dll_info
,
(
req_handler
)
req_suspend_thread
,
(
req_handler
)
req_suspend_thread
,
...
@@ -767,12 +769,15 @@ C_ASSERT( FIELD_OFFSET(struct get_thread_info_reply, pid) == 8 );
...
@@ -767,12 +769,15 @@ C_ASSERT( FIELD_OFFSET(struct get_thread_info_reply, pid) == 8 );
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
tid
)
==
12
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
tid
)
==
12
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
teb
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
teb
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
affinity
)
==
24
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
affinity
)
==
24
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
creation_time
)
==
32
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
exit_code
)
==
32
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
exit_time
)
==
40
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
priority
)
==
36
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
exit_code
)
==
48
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
last
)
==
40
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
priority
)
==
52
);
C_ASSERT
(
sizeof
(
struct
get_thread_info_reply
)
==
48
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
last
)
==
56
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_times_request
,
handle
)
==
12
);
C_ASSERT
(
sizeof
(
struct
get_thread_info_reply
)
==
64
);
C_ASSERT
(
sizeof
(
struct
get_thread_times_request
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_times_reply
,
creation_time
)
==
8
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_times_reply
,
exit_time
)
==
16
);
C_ASSERT
(
sizeof
(
struct
get_thread_times_reply
)
==
24
);
C_ASSERT
(
FIELD_OFFSET
(
struct
set_thread_info_request
,
handle
)
==
12
);
C_ASSERT
(
FIELD_OFFSET
(
struct
set_thread_info_request
,
handle
)
==
12
);
C_ASSERT
(
FIELD_OFFSET
(
struct
set_thread_info_request
,
mask
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
set_thread_info_request
,
mask
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
set_thread_info_request
,
priority
)
==
20
);
C_ASSERT
(
FIELD_OFFSET
(
struct
set_thread_info_request
,
priority
)
==
20
);
...
...
server/thread.c
View file @
6156cf31
...
@@ -1374,9 +1374,21 @@ DECL_HANDLER(get_thread_info)
...
@@ -1374,9 +1374,21 @@ DECL_HANDLER(get_thread_info)
reply
->
exit_code
=
(
thread
->
state
==
TERMINATED
)
?
thread
->
exit_code
:
STATUS_PENDING
;
reply
->
exit_code
=
(
thread
->
state
==
TERMINATED
)
?
thread
->
exit_code
:
STATUS_PENDING
;
reply
->
priority
=
thread
->
priority
;
reply
->
priority
=
thread
->
priority
;
reply
->
affinity
=
thread
->
affinity
;
reply
->
affinity
=
thread
->
affinity
;
reply
->
last
=
thread
->
process
->
running_threads
==
1
;
release_object
(
thread
);
}
}
/* fetch information about thread times */
DECL_HANDLER
(
get_thread_times
)
{
struct
thread
*
thread
;
if
((
thread
=
get_thread_from_handle
(
req
->
handle
,
THREAD_QUERY_INFORMATION
)))
{
reply
->
creation_time
=
thread
->
creation_time
;
reply
->
creation_time
=
thread
->
creation_time
;
reply
->
exit_time
=
thread
->
exit_time
;
reply
->
exit_time
=
thread
->
exit_time
;
reply
->
last
=
thread
->
process
->
running_threads
==
1
;
release_object
(
thread
);
release_object
(
thread
);
}
}
...
...
server/trace.c
View file @
6156cf31
...
@@ -1301,13 +1301,22 @@ static void dump_get_thread_info_reply( const struct get_thread_info_reply *req
...
@@ -1301,13 +1301,22 @@ static void dump_get_thread_info_reply( const struct get_thread_info_reply *req
fprintf
(
stderr
,
", tid=%04x"
,
req
->
tid
);
fprintf
(
stderr
,
", tid=%04x"
,
req
->
tid
);
dump_uint64
(
", teb="
,
&
req
->
teb
);
dump_uint64
(
", teb="
,
&
req
->
teb
);
dump_uint64
(
", affinity="
,
&
req
->
affinity
);
dump_uint64
(
", affinity="
,
&
req
->
affinity
);
dump_timeout
(
", creation_time="
,
&
req
->
creation_time
);
dump_timeout
(
", exit_time="
,
&
req
->
exit_time
);
fprintf
(
stderr
,
", exit_code=%d"
,
req
->
exit_code
);
fprintf
(
stderr
,
", exit_code=%d"
,
req
->
exit_code
);
fprintf
(
stderr
,
", priority=%d"
,
req
->
priority
);
fprintf
(
stderr
,
", priority=%d"
,
req
->
priority
);
fprintf
(
stderr
,
", last=%d"
,
req
->
last
);
fprintf
(
stderr
,
", last=%d"
,
req
->
last
);
}
}
static
void
dump_get_thread_times_request
(
const
struct
get_thread_times_request
*
req
)
{
fprintf
(
stderr
,
" handle=%04x"
,
req
->
handle
);
}
static
void
dump_get_thread_times_reply
(
const
struct
get_thread_times_reply
*
req
)
{
dump_timeout
(
" creation_time="
,
&
req
->
creation_time
);
dump_timeout
(
", exit_time="
,
&
req
->
exit_time
);
}
static
void
dump_set_thread_info_request
(
const
struct
set_thread_info_request
*
req
)
static
void
dump_set_thread_info_request
(
const
struct
set_thread_info_request
*
req
)
{
{
fprintf
(
stderr
,
" handle=%04x"
,
req
->
handle
);
fprintf
(
stderr
,
" handle=%04x"
,
req
->
handle
);
...
@@ -4256,6 +4265,7 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
...
@@ -4256,6 +4265,7 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
(
dump_func
)
dump_get_process_info_request
,
(
dump_func
)
dump_get_process_info_request
,
(
dump_func
)
dump_set_process_info_request
,
(
dump_func
)
dump_set_process_info_request
,
(
dump_func
)
dump_get_thread_info_request
,
(
dump_func
)
dump_get_thread_info_request
,
(
dump_func
)
dump_get_thread_times_request
,
(
dump_func
)
dump_set_thread_info_request
,
(
dump_func
)
dump_set_thread_info_request
,
(
dump_func
)
dump_get_dll_info_request
,
(
dump_func
)
dump_get_dll_info_request
,
(
dump_func
)
dump_suspend_thread_request
,
(
dump_func
)
dump_suspend_thread_request
,
...
@@ -4525,6 +4535,7 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
...
@@ -4525,6 +4535,7 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
(
dump_func
)
dump_get_process_info_reply
,
(
dump_func
)
dump_get_process_info_reply
,
NULL
,
NULL
,
(
dump_func
)
dump_get_thread_info_reply
,
(
dump_func
)
dump_get_thread_info_reply
,
(
dump_func
)
dump_get_thread_times_reply
,
NULL
,
NULL
,
(
dump_func
)
dump_get_dll_info_reply
,
(
dump_func
)
dump_get_dll_info_reply
,
(
dump_func
)
dump_suspend_thread_reply
,
(
dump_func
)
dump_suspend_thread_reply
,
...
@@ -4794,6 +4805,7 @@ static const char * const req_names[REQ_NB_REQUESTS] = {
...
@@ -4794,6 +4805,7 @@ static const char * const req_names[REQ_NB_REQUESTS] = {
"get_process_info"
,
"get_process_info"
,
"set_process_info"
,
"set_process_info"
,
"get_thread_info"
,
"get_thread_info"
,
"get_thread_times"
,
"set_thread_info"
,
"set_thread_info"
,
"get_dll_info"
,
"get_dll_info"
,
"suspend_thread"
,
"suspend_thread"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment