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
5daae3df
Commit
5daae3df
authored
Dec 02, 2005
by
Vitaliy Margolen
Committed by
Alexandre Julliard
Dec 02, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move semaphore objects into directory name space.
parent
f676bc8d
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
28 additions
and
6 deletions
+28
-6
sync.c
dlls/kernel/sync.c
+2
-0
sync.c
dlls/ntdll/sync.c
+2
-0
server_protocol.h
include/wine/server_protocol.h
+3
-1
protocol.def
server/protocol.def
+2
-0
semaphore.c
server/semaphore.c
+17
-5
trace.c
server/trace.c
+2
-0
No files found.
dlls/kernel/sync.c
View file @
5daae3df
...
...
@@ -807,6 +807,7 @@ HANDLE WINAPI CreateSemaphoreW( SECURITY_ATTRIBUTES *sa, LONG initial,
{
RtlInitUnicodeString
(
&
nameW
,
name
);
attr
.
ObjectName
=
&
nameW
;
attr
.
RootDirectory
=
get_BaseNamedObjects_handle
();
}
status
=
NtCreateSemaphore
(
&
ret
,
SEMAPHORE_ALL_ACCESS
,
&
attr
,
initial
,
max
);
...
...
@@ -858,6 +859,7 @@ HANDLE WINAPI OpenSemaphoreW( DWORD access, BOOL inherit, LPCWSTR name )
{
RtlInitUnicodeString
(
&
nameW
,
name
);
attr
.
ObjectName
=
&
nameW
;
attr
.
RootDirectory
=
get_BaseNamedObjects_handle
();
}
status
=
NtOpenSemaphore
(
&
ret
,
access
,
&
attr
);
...
...
dlls/ntdll/sync.c
View file @
5daae3df
...
...
@@ -85,6 +85,7 @@ NTSTATUS WINAPI NtCreateSemaphore( OUT PHANDLE SemaphoreHandle,
{
req
->
access
=
access
;
req
->
attributes
=
(
attr
)
?
attr
->
Attributes
:
0
;
req
->
rootdir
=
attr
?
attr
->
RootDirectory
:
0
;
req
->
initial
=
InitialCount
;
req
->
max
=
MaximumCount
;
if
(
len
)
wine_server_add_data
(
req
,
attr
->
ObjectName
->
Buffer
,
len
);
...
...
@@ -111,6 +112,7 @@ NTSTATUS WINAPI NtOpenSemaphore( OUT PHANDLE SemaphoreHandle,
{
req
->
access
=
access
;
req
->
attributes
=
(
attr
)
?
attr
->
Attributes
:
0
;
req
->
rootdir
=
attr
?
attr
->
RootDirectory
:
0
;
if
(
len
)
wine_server_add_data
(
req
,
attr
->
ObjectName
->
Buffer
,
len
);
ret
=
wine_server_call
(
req
);
*
SemaphoreHandle
=
reply
->
handle
;
...
...
include/wine/server_protocol.h
View file @
5daae3df
...
...
@@ -707,6 +707,7 @@ struct create_semaphore_request
struct
request_header
__header
;
unsigned
int
access
;
unsigned
int
attributes
;
obj_handle_t
rootdir
;
unsigned
int
initial
;
unsigned
int
max
;
/* VARARG(name,unicode_str); */
...
...
@@ -738,6 +739,7 @@ struct open_semaphore_request
struct
request_header
__header
;
unsigned
int
access
;
unsigned
int
attributes
;
obj_handle_t
rootdir
;
/* VARARG(name,unicode_str); */
};
struct
open_semaphore_reply
...
...
@@ -4306,6 +4308,6 @@ union generic_reply
struct
query_symlink_reply
query_symlink_reply
;
};
#define SERVER_PROTOCOL_VERSION 20
2
#define SERVER_PROTOCOL_VERSION 20
3
#endif
/* __WINE_WINE_SERVER_PROTOCOL_H */
server/protocol.def
View file @
5daae3df
...
...
@@ -558,6 +558,7 @@ enum event_op { PULSE_EVENT, SET_EVENT, RESET_EVENT };
@REQ(create_semaphore)
unsigned int access; /* wanted access rights */
unsigned int attributes; /* object attributes */
obj_handle_t rootdir; /* root directory */
unsigned int initial; /* initial count */
unsigned int max; /* maximum count */
VARARG(name,unicode_str); /* object name */
...
...
@@ -579,6 +580,7 @@ enum event_op { PULSE_EVENT, SET_EVENT, RESET_EVENT };
@REQ(open_semaphore)
unsigned int access; /* wanted access rights */
unsigned int attributes; /* object attributes */
obj_handle_t rootdir; /* root directory */
VARARG(name,unicode_str); /* object name */
@REPLY
obj_handle_t handle; /* handle to the semaphore */
...
...
server/semaphore.c
View file @
5daae3df
...
...
@@ -63,8 +63,8 @@ static const struct object_ops semaphore_ops =
};
static
struct
semaphore
*
create_semaphore
(
const
struct
unicode_str
*
name
,
unsigned
int
attr
,
unsigned
int
initial
,
unsigned
int
max
)
static
struct
semaphore
*
create_semaphore
(
struct
directory
*
root
,
const
struct
unicode_str
*
name
,
unsigned
int
attr
,
unsigned
int
initial
,
unsigned
int
max
)
{
struct
semaphore
*
sem
;
...
...
@@ -73,7 +73,7 @@ static struct semaphore *create_semaphore( const struct unicode_str *name, unsig
set_error
(
STATUS_INVALID_PARAMETER
);
return
NULL
;
}
if
((
sem
=
create_named_object
(
sync_namespace
,
&
semaphore_ops
,
name
,
attr
)))
if
((
sem
=
create_named_object
_dir
(
root
,
name
,
attr
,
&
semaphore_ops
)))
{
if
(
get_error
()
!=
STATUS_OBJECT_NAME_EXISTS
)
{
...
...
@@ -150,24 +150,36 @@ DECL_HANDLER(create_semaphore)
{
struct
semaphore
*
sem
;
struct
unicode_str
name
;
struct
directory
*
root
=
NULL
;
reply
->
handle
=
0
;
get_req_unicode_str
(
&
name
);
if
((
sem
=
create_semaphore
(
&
name
,
req
->
attributes
,
req
->
initial
,
req
->
max
)))
if
(
req
->
rootdir
&&
!
(
root
=
get_directory_obj
(
current
->
process
,
req
->
rootdir
,
0
)))
return
;
if
((
sem
=
create_semaphore
(
root
,
&
name
,
req
->
attributes
,
req
->
initial
,
req
->
max
)))
{
reply
->
handle
=
alloc_handle
(
current
->
process
,
sem
,
req
->
access
,
req
->
attributes
&
OBJ_INHERIT
);
release_object
(
sem
);
}
if
(
root
)
release_object
(
root
);
}
/* open a handle to a semaphore */
DECL_HANDLER
(
open_semaphore
)
{
struct
unicode_str
name
;
struct
directory
*
root
=
NULL
;
get_req_unicode_str
(
&
name
);
reply
->
handle
=
open_object
(
sync_namespace
,
&
name
,
&
semaphore_ops
,
req
->
access
,
req
->
attributes
);
if
(
req
->
rootdir
&&
!
(
root
=
get_directory_obj
(
current
->
process
,
req
->
rootdir
,
0
)))
return
;
reply
->
handle
=
open_object_dir
(
root
,
&
name
,
req
->
attributes
,
&
semaphore_ops
,
req
->
access
);
if
(
root
)
release_object
(
root
);
}
/* release a semaphore */
...
...
server/trace.c
View file @
5daae3df
...
...
@@ -968,6 +968,7 @@ static void dump_create_semaphore_request( const struct create_semaphore_request
{
fprintf
(
stderr
,
" access=%08x,"
,
req
->
access
);
fprintf
(
stderr
,
" attributes=%08x,"
,
req
->
attributes
);
fprintf
(
stderr
,
" rootdir=%p,"
,
req
->
rootdir
);
fprintf
(
stderr
,
" initial=%08x,"
,
req
->
initial
);
fprintf
(
stderr
,
" max=%08x,"
,
req
->
max
);
fprintf
(
stderr
,
" name="
);
...
...
@@ -994,6 +995,7 @@ static void dump_open_semaphore_request( const struct open_semaphore_request *re
{
fprintf
(
stderr
,
" access=%08x,"
,
req
->
access
);
fprintf
(
stderr
,
" attributes=%08x,"
,
req
->
attributes
);
fprintf
(
stderr
,
" rootdir=%p,"
,
req
->
rootdir
);
fprintf
(
stderr
,
" name="
);
dump_varargs_unicode_str
(
cur_size
);
}
...
...
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