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
2606ad53
Commit
2606ad53
authored
Jan 04, 2007
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Make thread_apc into a real object.
parent
46c46339
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
38 additions
and
5 deletions
+38
-5
thread.c
server/thread.c
+38
-5
No files found.
server/thread.c
View file @
2606ad53
...
...
@@ -68,6 +68,7 @@ struct thread_wait
struct
thread_apc
{
struct
object
obj
;
/* object header */
struct
list
entry
;
/* queue linked list */
struct
object
*
owner
;
/* object that queued this apc */
void
*
func
;
/* function to call in client */
...
...
@@ -77,6 +78,25 @@ struct thread_apc
void
*
arg3
;
};
static
void
dump_thread_apc
(
struct
object
*
obj
,
int
verbose
);
static
int
thread_apc_signaled
(
struct
object
*
obj
,
struct
thread
*
thread
);
static
const
struct
object_ops
thread_apc_ops
=
{
sizeof
(
struct
thread_apc
),
/* size */
dump_thread_apc
,
/* dump */
add_queue
,
/* add_queue */
remove_queue
,
/* remove_queue */
thread_apc_signaled
,
/* signaled */
no_satisfied
,
/* satisfied */
no_signal
,
/* signal */
no_get_fd
,
/* get_fd */
no_map_access
,
/* map_access */
no_lookup_name
,
/* lookup_name */
no_close_handle
,
/* close_handle */
no_destroy
/* destroy */
};
/* thread operations */
...
...
@@ -212,7 +232,7 @@ static void cleanup_thread( struct thread *thread )
int
i
;
struct
thread_apc
*
apc
;
while
((
apc
=
thread_dequeue_apc
(
thread
,
0
)))
free
(
apc
);
while
((
apc
=
thread_dequeue_apc
(
thread
,
0
)))
release_object
(
apc
);
free
(
thread
->
req_data
);
free
(
thread
->
reply_data
);
if
(
thread
->
request_fd
)
release_object
(
thread
->
request_fd
);
...
...
@@ -280,6 +300,19 @@ static unsigned int thread_map_access( struct object *obj, unsigned int access )
return
access
&
~
(
GENERIC_READ
|
GENERIC_WRITE
|
GENERIC_EXECUTE
|
GENERIC_ALL
);
}
static
void
dump_thread_apc
(
struct
object
*
obj
,
int
verbose
)
{
struct
thread_apc
*
apc
=
(
struct
thread_apc
*
)
obj
;
assert
(
obj
->
ops
==
&
thread_apc_ops
);
fprintf
(
stderr
,
"APC owner=%p type=%u
\n
"
,
apc
->
owner
,
apc
->
type
);
}
static
int
thread_apc_signaled
(
struct
object
*
obj
,
struct
thread
*
thread
)
{
return
0
;
}
/* get a thread pointer from a thread id (and increment the refcount) */
struct
thread
*
get_thread_from_id
(
thread_id_t
id
)
{
...
...
@@ -639,7 +672,7 @@ int thread_queue_apc( struct thread *thread, struct object *owner, void *func,
if
(
owner
)
thread_cancel_apc
(
thread
,
owner
,
system
);
if
(
thread
->
state
==
TERMINATED
)
return
0
;
if
(
!
(
apc
=
mem_alloc
(
sizeof
(
*
apc
)
)))
return
0
;
if
(
!
(
apc
=
alloc_object
(
&
thread_apc_ops
)))
return
0
;
apc
->
owner
=
owner
;
apc
->
func
=
func
;
apc
->
type
=
type
;
...
...
@@ -662,7 +695,7 @@ void thread_cancel_apc( struct thread *thread, struct object *owner, int system
{
if
(
apc
->
owner
!=
owner
)
continue
;
list_remove
(
&
apc
->
entry
);
free
(
apc
);
release_object
(
apc
);
return
;
}
}
...
...
@@ -1042,14 +1075,14 @@ DECL_HANDLER(get_apc)
* Exception: for APC_ASYNC_IO, func == NULL is legal.
*/
if
(
apc
->
func
||
apc
->
type
==
APC_ASYNC_IO
)
break
;
free
(
apc
);
release_object
(
apc
);
}
reply
->
func
=
apc
->
func
;
reply
->
type
=
apc
->
type
;
reply
->
arg1
=
apc
->
arg1
;
reply
->
arg2
=
apc
->
arg2
;
reply
->
arg3
=
apc
->
arg3
;
free
(
apc
);
release_object
(
apc
);
}
/* retrieve the current context of a 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