Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
f3cb4f7d
Commit
f3cb4f7d
authored
Jan 18, 2007
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Avoid inter-process APCs when called for the process itself.
parent
9d09e699
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
20 additions
and
13 deletions
+20
-13
sync.c
dlls/ntdll/sync.c
+0
-0
server_protocol.h
include/wine/server_protocol.h
+2
-1
protocol.def
server/protocol.def
+1
-0
thread.c
server/thread.c
+15
-11
trace.c
server/trace.c
+2
-1
No files found.
dlls/ntdll/sync.c
View file @
f3cb4f7d
This diff is collapsed.
Click to expand it.
include/wine/server_protocol.h
View file @
f3cb4f7d
...
...
@@ -714,6 +714,7 @@ struct queue_apc_reply
{
struct
reply_header
__header
;
obj_handle_t
handle
;
int
self
;
};
...
...
@@ -4624,6 +4625,6 @@ union generic_reply
struct
query_symlink_reply
query_symlink_reply
;
};
#define SERVER_PROTOCOL_VERSION 27
3
#define SERVER_PROTOCOL_VERSION 27
4
#endif
/* __WINE_WINE_SERVER_PROTOCOL_H */
server/protocol.def
View file @
f3cb4f7d
...
...
@@ -635,6 +635,7 @@ typedef union
apc_call_t call; /* call arguments */
@REPLY
obj_handle_t handle; /* APC handle */
int self; /* run APC in caller itself? */
@END
...
...
server/thread.c
View file @
f3cb4f7d
...
...
@@ -1172,7 +1172,7 @@ DECL_HANDLER(queue_apc)
break
;
case
APC_MAP_VIEW
:
process
=
get_process_from_handle
(
req
->
process
,
PROCESS_VM_OPERATION
);
if
(
process
)
if
(
process
&&
process
!=
current
->
process
)
{
/* duplicate the handle into the target process */
obj_handle_t
handle
=
duplicate_handle
(
current
->
process
,
apc
->
call
.
map_view
.
handle
,
...
...
@@ -1200,18 +1200,22 @@ DECL_HANDLER(queue_apc)
}
else
if
(
process
)
{
obj_handle_t
handle
=
alloc_handle
(
current
->
process
,
apc
,
SYNCHRONIZE
,
0
);
if
(
handle
)
reply
->
self
=
(
process
==
current
->
process
);
if
(
!
reply
->
self
)
{
if
(
queue_apc
(
process
,
NULL
,
apc
))
obj_handle_t
handle
=
alloc_handle
(
current
->
process
,
apc
,
SYNCHRONIZE
,
0
);
if
(
handle
)
{
apc
->
caller
=
(
struct
thread
*
)
grab_object
(
current
);
reply
->
handle
=
handle
;
}
else
{
close_handle
(
current
->
process
,
handle
);
set_error
(
STATUS_PROCESS_IS_TERMINATING
);
if
(
queue_apc
(
process
,
NULL
,
apc
))
{
apc
->
caller
=
(
struct
thread
*
)
grab_object
(
current
);
reply
->
handle
=
handle
;
}
else
{
close_handle
(
current
->
process
,
handle
);
set_error
(
STATUS_PROCESS_IS_TERMINATING
);
}
}
}
release_object
(
process
);
...
...
server/trace.c
View file @
f3cb4f7d
...
...
@@ -995,7 +995,8 @@ static void dump_queue_apc_request( const struct queue_apc_request *req )
static
void
dump_queue_apc_reply
(
const
struct
queue_apc_reply
*
req
)
{
fprintf
(
stderr
,
" handle=%p"
,
req
->
handle
);
fprintf
(
stderr
,
" handle=%p,"
,
req
->
handle
);
fprintf
(
stderr
,
" self=%d"
,
req
->
self
);
}
static
void
dump_get_apc_request
(
const
struct
get_apc_request
*
req
)
...
...
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