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
6a72dc52
Commit
6a72dc52
authored
Apr 14, 2000
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Load done event now created by the server.
parent
e5efa0ce
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
49 additions
and
44 deletions
+49
-44
server.h
include/server.h
+2
-2
process.c
scheduler/process.c
+3
-6
event.c
server/event.c
+2
-2
object.h
server/object.h
+2
-0
process.c
server/process.c
+37
-30
thread.c
server/thread.c
+1
-2
trace.c
server/trace.c
+2
-2
No files found.
include/server.h
View file @
6a72dc52
...
...
@@ -113,13 +113,13 @@ struct new_process_request
IN
int
hstdin
;
/* handle for stdin */
IN
int
hstdout
;
/* handle for stdout */
IN
int
hstderr
;
/* handle for stderr */
IN
int
event
;
/* event to signal startup */
IN
int
cmd_show
;
/* main window show mode */
IN
void
*
env_ptr
;
/* pointer to environment (FIXME: hack) */
OUT
void
*
pid
;
/* process id */
OUT
int
phandle
;
/* process handle (in the current process) */
OUT
void
*
tid
;
/* thread id */
OUT
int
thandle
;
/* thread handle (in the current process) */
OUT
int
event
;
/* event handle to signal startup */
IN
char
cmdline
[
1
];
/* command line */
};
...
...
@@ -1209,7 +1209,7 @@ enum request
REQ_NB_REQUESTS
};
#define SERVER_PROTOCOL_VERSION
6
#define SERVER_PROTOCOL_VERSION
7
/* ### make_requests end ### */
/* Everything above this line is generated automatically by tools/make_requests */
...
...
scheduler/process.c
View file @
6a72dc52
...
...
@@ -490,7 +490,7 @@ PDB *PROCESS_Create( NE_MODULE *pModule, HFILE hFile, LPCSTR cmd_line, LPCSTR en
BOOL
inherit
,
DWORD
flags
,
STARTUPINFOA
*
startup
,
PROCESS_INFORMATION
*
info
)
{
HANDLE
handles
[
2
],
load_done_evt
=
0
;
HANDLE
handles
[
2
],
load_done_evt
=
-
1
;
DWORD
exitcode
,
size
;
BOOL
alloc_stack16
;
int
fd
=
-
1
;
...
...
@@ -501,7 +501,6 @@ PDB *PROCESS_Create( NE_MODULE *pModule, HFILE hFile, LPCSTR cmd_line, LPCSTR en
if
(
!
pdb
)
return
NULL
;
info
->
hThread
=
info
->
hProcess
=
INVALID_HANDLE_VALUE
;
if
(
!
(
load_done_evt
=
CreateEventA
(
NULL
,
TRUE
,
FALSE
,
NULL
)))
goto
error
;
/* Create the process on the server side */
...
...
@@ -511,7 +510,6 @@ PDB *PROCESS_Create( NE_MODULE *pModule, HFILE hFile, LPCSTR cmd_line, LPCSTR en
req
->
create_flags
=
flags
;
req
->
start_flags
=
startup
->
dwFlags
;
req
->
exe_file
=
hFile
;
req
->
event
=
load_done_evt
;
if
(
startup
->
dwFlags
&
STARTF_USESTDHANDLES
)
{
req
->
hstdin
=
startup
->
hStdInput
;
...
...
@@ -533,6 +531,7 @@ PDB *PROCESS_Create( NE_MODULE *pModule, HFILE hFile, LPCSTR cmd_line, LPCSTR en
info
->
dwProcessId
=
(
DWORD
)
req
->
pid
;
info
->
hThread
=
req
->
thandle
;
info
->
dwThreadId
=
(
DWORD
)
req
->
tid
;
load_done_evt
=
req
->
event
;
if
(
pModule
->
module32
)
/* Win32 process */
{
...
...
@@ -596,12 +595,10 @@ PDB *PROCESS_Create( NE_MODULE *pModule, HFILE hFile, LPCSTR cmd_line, LPCSTR en
}
CloseHandle
(
load_done_evt
);
load_done_evt
=
0
;
return
pdb
;
error:
if
(
load_done_evt
)
CloseHandle
(
load_done_evt
);
if
(
load_done_evt
!=
-
1
)
CloseHandle
(
load_done_evt
);
if
(
info
->
hThread
!=
INVALID_HANDLE_VALUE
)
CloseHandle
(
info
->
hThread
);
if
(
info
->
hProcess
!=
INVALID_HANDLE_VALUE
)
CloseHandle
(
info
->
hProcess
);
PROCESS_FreePDB
(
pdb
);
...
...
server/event.c
View file @
6a72dc52
...
...
@@ -43,8 +43,8 @@ static const struct object_ops event_ops =
};
st
atic
st
ruct
event
*
create_event
(
const
WCHAR
*
name
,
size_t
len
,
int
manual_reset
,
int
initial_state
)
struct
event
*
create_event
(
const
WCHAR
*
name
,
size_t
len
,
int
manual_reset
,
int
initial_state
)
{
struct
event
*
event
;
...
...
server/object.h
View file @
6a72dc52
...
...
@@ -127,6 +127,8 @@ static inline int time_before( struct timeval *t1, struct timeval *t2 )
struct
event
;
extern
struct
event
*
create_event
(
const
WCHAR
*
name
,
size_t
len
,
int
manual_reset
,
int
initial_state
);
extern
struct
event
*
get_event_obj
(
struct
process
*
process
,
int
handle
,
unsigned
int
access
);
extern
void
pulse_event
(
struct
event
*
event
);
extern
void
set_event
(
struct
event
*
event
);
...
...
server/process.c
View file @
6a72dc52
...
...
@@ -77,7 +77,6 @@ static int set_creation_info( struct process *process, struct new_process_reques
req
->
hstdin
=
-
1
;
req
->
hstdout
=
-
1
;
req
->
hstderr
=
-
1
;
req
->
event
=
-
1
;
req
->
cmd_show
=
0
;
req
->
env_ptr
=
NULL
;
}
...
...
@@ -185,26 +184,23 @@ struct thread *create_process( int fd, struct process *parent,
process
->
info
->
exe_file
=
-
1
;
}
/* get the init done event */
if
(
process
->
info
->
event
!=
-
1
)
{
if
(
!
(
process
->
init_event
=
get_event_obj
(
parent
,
process
->
info
->
event
,
EVENT_MODIFY_STATE
)))
goto
error
;
}
/* set the process console */
if
(
!
set_process_console
(
process
,
parent
))
goto
error
;
/* create the main thread */
if
(
!
(
thread
=
create_thread
(
fd
,
process
,
(
process
->
create_flags
&
CREATE_SUSPENDED
)
!=
0
)))
goto
error
;
/* create the init done event */
if
(
!
(
process
->
init_event
=
create_event
(
NULL
,
0
,
1
,
0
)))
goto
error
;
/* set the process console */
if
(
!
set_process_console
(
process
,
parent
))
goto
error
;
/* attach to the debugger if requested */
if
(
process
->
create_flags
&
(
DEBUG_PROCESS
|
DEBUG_ONLY_THIS_PROCESS
))
set_process_debugger
(
process
,
current
);
else
if
(
parent
&&
parent
->
debugger
&&
!
(
parent
->
create_flags
&
DEBUG_ONLY_THIS_PROCESS
))
set_process_debugger
(
process
,
parent
->
debugger
);
add_process_thread
(
process
,
thread
);
release_object
(
process
);
return
thread
;
...
...
@@ -212,6 +208,7 @@ struct thread *create_process( int fd, struct process *parent,
close
(
fd
);
free_console
(
process
);
if
(
process
->
handles
)
release_object
(
process
->
handles
);
if
(
thread
)
release_object
(
thread
);
release_object
(
process
);
return
NULL
;
}
...
...
@@ -580,9 +577,11 @@ DECL_HANDLER(new_process)
size_t
len
=
get_req_strlen
(
req
,
req
->
cmdline
);
struct
thread
*
thread
;
int
sock
[
2
];
int
event
=
-
1
,
phandle
=
-
1
;
req
->
phandle
=
-
1
;
req
->
thandle
=
-
1
;
req
->
event
=
-
1
;
req
->
pid
=
NULL
;
req
->
tid
=
NULL
;
...
...
@@ -592,25 +591,33 @@ DECL_HANDLER(new_process)
return
;
}
if
((
thread
=
create_process
(
sock
[
0
],
current
->
process
,
req
,
req
->
cmdline
,
len
)))
{
int
phandle
=
alloc_handle
(
current
->
process
,
thread
->
process
,
PROCESS_ALL_ACCESS
,
req
->
pinherit
);
if
((
req
->
phandle
=
phandle
)
!=
-
1
)
{
if
((
req
->
thandle
=
alloc_handle
(
current
->
process
,
thread
,
THREAD_ALL_ACCESS
,
req
->
tinherit
))
!=
-
1
)
{
/* thread object will be released when the thread gets killed */
set_reply_fd
(
current
,
sock
[
1
]
);
req
->
pid
=
thread
->
process
;
req
->
tid
=
thread
;
return
;
}
close_handle
(
current
->
process
,
phandle
);
}
release_object
(
thread
);
}
if
(
!
(
thread
=
create_process
(
sock
[
0
],
current
->
process
,
req
,
req
->
cmdline
,
len
)))
goto
error
;
if
((
event
=
alloc_handle
(
current
->
process
,
thread
->
process
->
init_event
,
EVENT_ALL_ACCESS
,
0
))
==
-
1
)
goto
error
;
if
((
phandle
=
alloc_handle
(
current
->
process
,
thread
->
process
,
PROCESS_ALL_ACCESS
,
req
->
pinherit
))
==
-
1
)
goto
error
;
if
((
req
->
thandle
=
alloc_handle
(
current
->
process
,
thread
,
THREAD_ALL_ACCESS
,
req
->
tinherit
))
==
-
1
)
goto
error
;
/* thread object will be released when the thread gets killed */
set_reply_fd
(
current
,
sock
[
1
]
);
req
->
pid
=
get_process_id
(
thread
->
process
);
req
->
tid
=
get_thread_id
(
thread
);
req
->
phandle
=
phandle
;
req
->
event
=
event
;
return
;
error
:
if
(
phandle
!=
-
1
)
close_handle
(
current
->
process
,
phandle
);
if
(
event
!=
-
1
)
close_handle
(
current
->
process
,
event
);
if
(
thread
)
release_object
(
thread
);
close
(
sock
[
1
]
);
}
...
...
server/thread.c
View file @
6a72dc52
...
...
@@ -158,14 +158,12 @@ struct thread *create_thread( int fd, struct process *process, int suspend )
if
((
thread
->
next
=
first_thread
)
!=
NULL
)
thread
->
next
->
prev
=
thread
;
first_thread
=
thread
;
add_process_thread
(
process
,
thread
);
set_select_events
(
&
thread
->
obj
,
POLLIN
);
/* start listening to events */
if
(
!
alloc_client_buffer
(
thread
))
goto
error
;
return
thread
;
error:
remove_process_thread
(
process
,
thread
);
release_object
(
thread
);
return
NULL
;
}
...
...
@@ -611,6 +609,7 @@ DECL_HANDLER(new_thread)
{
set_reply_fd
(
current
,
sock
[
1
]
);
/* thread object will be released when the thread gets killed */
add_process_thread
(
current
->
process
,
thread
);
return
;
}
release_object
(
thread
);
...
...
server/trace.c
View file @
6a72dc52
...
...
@@ -224,7 +224,6 @@ static void dump_new_process_request( const struct new_process_request *req )
fprintf
(
stderr
,
" hstdin=%d,"
,
req
->
hstdin
);
fprintf
(
stderr
,
" hstdout=%d,"
,
req
->
hstdout
);
fprintf
(
stderr
,
" hstderr=%d,"
,
req
->
hstderr
);
fprintf
(
stderr
,
" event=%d,"
,
req
->
event
);
fprintf
(
stderr
,
" cmd_show=%d,"
,
req
->
cmd_show
);
fprintf
(
stderr
,
" env_ptr=%p,"
,
req
->
env_ptr
);
fprintf
(
stderr
,
" cmdline="
);
...
...
@@ -236,7 +235,8 @@ static void dump_new_process_reply( const struct new_process_request *req )
fprintf
(
stderr
,
" pid=%p,"
,
req
->
pid
);
fprintf
(
stderr
,
" phandle=%d,"
,
req
->
phandle
);
fprintf
(
stderr
,
" tid=%p,"
,
req
->
tid
);
fprintf
(
stderr
,
" thandle=%d"
,
req
->
thandle
);
fprintf
(
stderr
,
" thandle=%d,"
,
req
->
thandle
);
fprintf
(
stderr
,
" event=%d"
,
req
->
event
);
}
static
void
dump_new_thread_request
(
const
struct
new_thread_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