Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
a91c5be6
Commit
a91c5be6
authored
Apr 24, 2003
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pgindent new Win32 files.
parent
1a67e486
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
106 additions
and
81 deletions
+106
-81
src/backend/port/win32/sem.c
src/backend/port/win32/sem.c
+67
-50
src/backend/port/win32/shm.c
src/backend/port/win32/shm.c
+39
-31
No files found.
src/backend/port/win32/sem.c
View file @
a91c5be6
...
@@ -13,10 +13,13 @@
...
@@ -13,10 +13,13 @@
#include <errno.h>
#include <errno.h>
typedef
struct
{
typedef
struct
{
int
m_numSems
;
int
m_numSems
;
off_t
m_semaphoreHandles
;
// offset from beginning of header
off_t
m_semaphoreHandles
;
off_t
m_semaphoreCounts
;
// offset from beginning of header
//offset from beginning of header
off_t
m_semaphoreCounts
;
//offset from beginning of header
}
win32_sem_set_hdr
;
}
win32_sem_set_hdr
;
/* Control of a semaphore pool. The pool is an area in which we stored all
/* Control of a semaphore pool. The pool is an area in which we stored all
...
@@ -27,20 +30,22 @@ typedef struct {
...
@@ -27,20 +30,22 @@ typedef struct {
int
int
semctl
(
int
semId
,
int
semNum
,
int
flag
,
union
semun
semun
)
semctl
(
int
semId
,
int
semNum
,
int
flag
,
union
semun
semun
)
{
{
win32_sem_set_hdr
*
the_set
=
(
win32_sem_set_hdr
*
)
MAKE_PTR
(
semId
);
win32_sem_set_hdr
*
the_set
=
(
win32_sem_set_hdr
*
)
MAKE_PTR
(
semId
);
/* semNum might be 0 */
/* semNum might be 0 */
/* semun.array contains the sem initial values */
/* semun.array contains the sem initial values */
int
*
sem_counts
=
(
int
*
)((
off_t
)
the_set
+
the_set
->
m_semaphoreCounts
);
int
*
sem_counts
=
(
int
*
)
((
off_t
)
the_set
+
the_set
->
m_semaphoreCounts
);
/* Fix the count of all sem of the pool to semun.array */
/* Fix the count of all sem of the pool to semun.array */
if
(
flag
==
SETALL
)
if
(
flag
==
SETALL
)
{
{
int
i
;
int
i
;
struct
sembuf
sops
;
struct
sembuf
sops
;
sops
.
sem_flg
=
IPC_NOWAIT
;
sops
.
sem_flg
=
IPC_NOWAIT
;
for
(
i
=
0
;
i
<
the_set
->
m_numSems
;
++
i
)
{
for
(
i
=
0
;
i
<
the_set
->
m_numSems
;
++
i
)
{
if
(
semun
.
array
[
i
]
==
sem_counts
[
i
])
if
(
semun
.
array
[
i
]
==
sem_counts
[
i
])
continue
;
/* Nothing to do */
continue
;
/* Nothing to do */
...
@@ -61,8 +66,10 @@ semctl(int semId, int semNum, int flag, union semun semun)
...
@@ -61,8 +66,10 @@ semctl(int semId, int semNum, int flag, union semun semun)
/* Fix the count of one semaphore to semun.val */
/* Fix the count of one semaphore to semun.val */
else
if
(
flag
==
SETVAL
)
else
if
(
flag
==
SETVAL
)
{
{
if
(
semun
.
val
!=
sem_counts
[
semNum
])
{
if
(
semun
.
val
!=
sem_counts
[
semNum
])
{
struct
sembuf
sops
;
struct
sembuf
sops
;
sops
.
sem_flg
=
IPC_NOWAIT
;
sops
.
sem_flg
=
IPC_NOWAIT
;
sops
.
sem_num
=
semNum
;
sops
.
sem_num
=
semNum
;
...
@@ -83,7 +90,7 @@ semctl(int semId, int semNum, int flag, union semun semun)
...
@@ -83,7 +90,7 @@ semctl(int semId, int semNum, int flag, union semun semun)
else
if
(
flag
==
IPC_RMID
)
else
if
(
flag
==
IPC_RMID
)
{
{
int
i
;
int
i
;
HANDLE
*
sem_handles
=
(
HANDLE
*
)((
off_t
)
the_set
+
the_set
->
m_semaphoreHandles
);
HANDLE
*
sem_handles
=
(
HANDLE
*
)
((
off_t
)
the_set
+
the_set
->
m_semaphoreHandles
);
/* Loop over all semaphore to delete them */
/* Loop over all semaphore to delete them */
for
(
i
=
0
;
i
<
the_set
->
m_numSems
;
++
i
)
for
(
i
=
0
;
i
<
the_set
->
m_numSems
;
++
i
)
...
@@ -94,15 +101,11 @@ semctl(int semId, int semNum, int flag, union semun semun)
...
@@ -94,15 +101,11 @@ semctl(int semId, int semNum, int flag, union semun semun)
/* Get the current semaphore count */
/* Get the current semaphore count */
else
if
(
flag
==
GETNCNT
)
else
if
(
flag
==
GETNCNT
)
{
return
the_set
->
m_numSems
;
return
the_set
->
m_numSems
;
}
/* Get the current semaphore count of the first semaphore in the pool */
/* Get the current semaphore count of the first semaphore in the pool */
else
if
(
flag
==
GETVAL
)
else
if
(
flag
==
GETVAL
)
{
return
sem_counts
[
semNum
];
return
sem_counts
[
semNum
];
}
/* Other commands not yet supported */
/* Other commands not yet supported */
else
else
...
@@ -119,14 +122,14 @@ semget(int semKey, int semNum, int flags)
...
@@ -119,14 +122,14 @@ semget(int semKey, int semNum, int flags)
char
semname
[
32
];
char
semname
[
32
];
char
cur_num
[
20
];
char
cur_num
[
20
];
DWORD
last_error
;
DWORD
last_error
;
char
*
num_part
;
char
*
num_part
;
bool
ans
=
true
;
bool
ans
=
true
;
SECURITY_ATTRIBUTES
sec_attrs
;
SECURITY_ATTRIBUTES
sec_attrs
;
HANDLE
cur_handle
;
HANDLE
cur_handle
;
bool
found
=
false
;
bool
found
=
false
;
Size
sem_set_size
=
sizeof
(
win32_sem_set_hdr
)
+
semNum
*
(
sizeof
(
HANDLE
)
+
sizeof
(
int
));
Size
sem_set_size
=
sizeof
(
win32_sem_set_hdr
)
+
semNum
*
(
sizeof
(
HANDLE
)
+
sizeof
(
int
));
HANDLE
*
sem_handles
=
NULL
;
HANDLE
*
sem_handles
=
NULL
;
int
*
sem_counts
=
NULL
;
int
*
sem_counts
=
NULL
;
sec_attrs
.
nLength
=
sizeof
(
sec_attrs
);
sec_attrs
.
nLength
=
sizeof
(
sec_attrs
);
sec_attrs
.
lpSecurityDescriptor
=
NULL
;
sec_attrs
.
lpSecurityDescriptor
=
NULL
;
...
@@ -135,23 +138,27 @@ semget(int semKey, int semNum, int flags)
...
@@ -135,23 +138,27 @@ semget(int semKey, int semNum, int flags)
sprintf
(
semname
,
"PG_SEMSET.%d."
,
semKey
);
sprintf
(
semname
,
"PG_SEMSET.%d."
,
semKey
);
num_part
=
semname
+
strlen
(
semname
);
num_part
=
semname
+
strlen
(
semname
);
strcpy
(
num_part
,
_itoa
(
_getpid
()
*
-
1
,
cur_num
,
10
));
/* For shared memory, include the pid */
strcpy
(
num_part
,
_itoa
(
_getpid
()
*
-
1
,
cur_num
,
10
));
/* For shared memory,
win32_sem_set_hdr
*
new_set
=
(
win32_sem_set_hdr
*
)
ShmemInitStruct
(
semname
,
sem_set_size
,
&
found
);
* include the pid */
win32_sem_set_hdr
*
new_set
=
(
win32_sem_set_hdr
*
)
ShmemInitStruct
(
semname
,
sem_set_size
,
&
found
);
if
(
found
)
{
if
(
found
)
{
/* This should *never* happen */
/* This should *never* happen */
errno
=
EEXIST
;
errno
=
EEXIST
;
return
-
1
;
return
-
1
;
}
}
new_set
->
m_numSems
=
semNum
;
new_set
->
m_numSems
=
semNum
;
new_set
->
m_semaphoreHandles
=
sizeof
(
win32_sem_set_hdr
);
// array starts after header
new_set
->
m_semaphoreHandles
=
sizeof
(
win32_sem_set_hdr
);
//array starts after header
new_set
->
m_semaphoreCounts
=
new_set
->
m_semaphoreHandles
+
(
sizeof
(
HANDLE
)
*
semNum
);
new_set
->
m_semaphoreCounts
=
new_set
->
m_semaphoreHandles
+
(
sizeof
(
HANDLE
)
*
semNum
);
sem_handles
=
(
HANDLE
*
)((
off_t
)
new_set
+
new_set
->
m_semaphoreHandles
);
sem_handles
=
(
HANDLE
*
)
((
off_t
)
new_set
+
new_set
->
m_semaphoreHandles
);
sem_counts
=
(
int
*
)((
off_t
)
new_set
+
new_set
->
m_semaphoreCounts
);
sem_counts
=
(
int
*
)
((
off_t
)
new_set
+
new_set
->
m_semaphoreCounts
);
for
(
int
i
=
0
;
i
<
semNum
&&
ans
;
++
i
)
{
for
(
int
i
=
0
;
i
<
semNum
&&
ans
;
++
i
)
{
strcpy
(
num_part
,
_itoa
(
i
,
cur_num
,
10
));
strcpy
(
num_part
,
_itoa
(
i
,
cur_num
,
10
));
if
(
flags
&
IPC_CREAT
)
if
(
flags
&
IPC_CREAT
)
...
@@ -174,11 +181,13 @@ semget(int semKey, int semNum, int flags)
...
@@ -174,11 +181,13 @@ semget(int semKey, int semNum, int flags)
}
}
}
}
if
(
ans
)
{
if
(
ans
)
return
MAKE_OFFSET
(
new_set
);
return
MAKE_OFFSET
(
new_set
);
}
else
{
else
// Blow away what we've got right now...
{
for
(
int
i
=
0
;
i
<
semNum
;
++
i
)
{
/* Blow away what we've got right now... */
for
(
int
i
=
0
;
i
<
semNum
;
++
i
)
{
if
(
sem_handles
[
i
])
if
(
sem_handles
[
i
])
CloseHandle
(
sem_handles
[
i
]);
CloseHandle
(
sem_handles
[
i
]);
else
else
...
@@ -193,13 +202,17 @@ semget(int semKey, int semNum, int flags)
...
@@ -193,13 +202,17 @@ semget(int semKey, int semNum, int flags)
int
int
semop
(
int
semId
,
struct
sembuf
*
sops
,
int
nsops
)
semop
(
int
semId
,
struct
sembuf
*
sops
,
int
nsops
)
{
{
win32_sem_set_hdr
*
the_set
=
(
win32_sem_set_hdr
*
)
MAKE_PTR
(
semId
);
win32_sem_set_hdr
*
the_set
=
(
win32_sem_set_hdr
*
)
MAKE_PTR
(
semId
);
HANDLE
*
sem_handles
=
(
HANDLE
*
)((
off_t
)
the_set
+
the_set
->
m_semaphoreHandles
);
HANDLE
*
sem_handles
=
(
HANDLE
*
)
((
off_t
)
the_set
+
the_set
->
m_semaphoreHandles
);
int
*
sem_counts
=
(
int
*
)((
off_t
)
the_set
+
the_set
->
m_semaphoreCounts
);
int
*
sem_counts
=
(
int
*
)
((
off_t
)
the_set
+
the_set
->
m_semaphoreCounts
);
HANDLE
cur_handle
;
HANDLE
cur_handle
;
if
(
nsops
!=
1
)
{
if
(
nsops
!=
1
)
/* Not supported (we return on 1st success, and don't cancel earlier ops) */
{
/*
* Not supported (we return on 1st success, and don't cancel
* earlier ops)
*/
errno
=
E2BIG
;
errno
=
E2BIG
;
return
-
1
;
return
-
1
;
}
}
...
@@ -209,22 +222,26 @@ semop(int semId, struct sembuf * sops, int nsops)
...
@@ -209,22 +222,26 @@ semop(int semId, struct sembuf * sops, int nsops)
if
(
sops
[
0
].
sem_op
==
-
1
)
if
(
sops
[
0
].
sem_op
==
-
1
)
{
{
DWORD
ret
;
DWORD
ret
;
if
(
sops
[
0
].
sem_flg
&
IPC_NOWAIT
)
if
(
sops
[
0
].
sem_flg
&
IPC_NOWAIT
)
ret
=
WaitForSingleObject
(
cur_handle
,
0
);
ret
=
WaitForSingleObject
(
cur_handle
,
0
);
else
else
ret
=
WaitForSingleObject
(
cur_handle
,
INFINITE
);
ret
=
WaitForSingleObject
(
cur_handle
,
INFINITE
);
if
(
ret
==
WAIT_OBJECT_0
)
{
if
(
ret
==
WAIT_OBJECT_0
)
{
/* We got it! */
/* We got it! */
sem_counts
[
sops
[
0
].
sem_num
]
--
;
sem_counts
[
sops
[
0
].
sem_num
]
--
;
return
0
;
return
0
;
}
else
if
(
ret
==
WAIT_TIMEOUT
)
}
else
if
(
ret
==
WAIT_TIMEOUT
)
/* Couldn't get it */
/* Couldn't get it */
errno
=
EAGAIN
;
errno
=
EAGAIN
;
else
else
errno
=
EIDRM
;
errno
=
EIDRM
;
}
}
else
if
(
sops
[
0
].
sem_op
>
0
)
{
else
if
(
sops
[
0
].
sem_op
>
0
)
{
/* Don't want the lock anymore */
/* Don't want the lock anymore */
sem_counts
[
sops
[
0
].
sem_num
]
++
;
sem_counts
[
sops
[
0
].
sem_num
]
++
;
ReleaseSemaphore
(
cur_handle
,
sops
[
0
].
sem_op
,
NULL
);
ReleaseSemaphore
(
cur_handle
,
sops
[
0
].
sem_op
,
NULL
);
...
...
src/backend/port/win32/shm.c
View file @
a91c5be6
...
@@ -28,15 +28,16 @@ shmdt(const void *shmaddr)
...
@@ -28,15 +28,16 @@ shmdt(const void *shmaddr)
/* Attach to an existing area */
/* Attach to an existing area */
void
*
void
*
shmat
(
int
memId
,
void
*
shmaddr
,
int
flag
)
shmat
(
int
memId
,
void
*
shmaddr
,
int
flag
)
{
{
/*
KEW_
TODO -- shmat needs to count # attached to shared mem */
/* TODO -- shmat needs to count # attached to shared mem */
void
*
lpmem
=
MapViewOfFileEx
((
HANDLE
)
memId
,
void
*
lpmem
=
MapViewOfFileEx
((
HANDLE
)
memId
,
FILE_MAP_WRITE
|
FILE_MAP_READ
,
FILE_MAP_WRITE
|
FILE_MAP_READ
,
0
,
0
,
/* (DWORD)pshmdsc->segsize */
s_segsize
,
shmaddr
);
0
,
0
,
/* (DWORD)pshmdsc->segsize */
s_segsize
,
shmaddr
);
if
(
lpmem
==
NULL
)
{
if
(
lpmem
==
NULL
)
lpmem
=
(
void
*
)
-
1
;
{
lpmem
=
(
void
*
)
-
1
;
errno
=
GetLastError
();
errno
=
GetLastError
();
}
}
...
@@ -50,19 +51,22 @@ shmctl(int shmid, int flag, struct shmid_ds * dummy)
...
@@ -50,19 +51,22 @@ shmctl(int shmid, int flag, struct shmid_ds * dummy)
if
(
flag
==
IPC_RMID
)
if
(
flag
==
IPC_RMID
)
{
{
/* Delete the area */
/* Delete the area */
CloseHandle
((
HANDLE
)
shmid
);
CloseHandle
((
HANDLE
)
shmid
);
return
0
;
return
0
;
}
}
if
(
flag
==
IPC_STAT
)
if
(
flag
==
IPC_STAT
)
{
{
/* Can only test for if exists */
/* Can only test for if exists */
int
hmap
=
shmget
(
shmid
,
0
,
0
);
int
hmap
=
shmget
(
shmid
,
0
,
0
);
if
(
hmap
<
0
)
{
if
(
hmap
<
0
)
{
/* Shared memory does not exist */
/* Shared memory does not exist */
errno
=
EINVAL
;
errno
=
EINVAL
;
return
-
1
;
return
-
1
;
}
}
else
{
else
{
/* Shared memory does exist and must be in use */
/* Shared memory does exist and must be in use */
shmctl
(
hmap
,
IPC_RMID
,
NULL
);
/* Release our hold on it */
shmctl
(
hmap
,
IPC_RMID
,
NULL
);
/* Release our hold on it */
errno
=
0
;
errno
=
0
;
...
@@ -85,26 +89,30 @@ shmget(int memKey, int size, int flag)
...
@@ -85,26 +89,30 @@ shmget(int memKey, int size, int flag)
s_segsize
=
size
;
s_segsize
=
size
;
sprintf
(
szShareMem
,
"sharemem.%d"
,
memKey
);
sprintf
(
szShareMem
,
"sharemem.%d"
,
memKey
);
if
(
flag
&
IPC_CREAT
)
{
if
(
flag
&
IPC_CREAT
)
hmap
=
CreateFileMapping
((
HANDLE
)
0xFFFFFFFF
,
/* Use the swap file */
{
hmap
=
CreateFileMapping
((
HANDLE
)
0xFFFFFFFF
,
/* Use the swap file */
NULL
,
NULL
,
PAGE_READWRITE
,
/* Memory is Read/Write */
PAGE_READWRITE
,
/* Memory is Read/Write */
0L
,
/* Size Upper 32 Bits */
0L
,
/* Size Upper 32 Bits */
(
DWORD
)
s_segsize
,
/* Size Lower 32 bits
*/
(
DWORD
)
s_segsize
,
/* Size Lower 32 bits
*/
szShareMem
);
szShareMem
);
}
}
else
{
else
{
hmap
=
OpenFileMapping
(
FILE_MAP_ALL_ACCESS
,
hmap
=
OpenFileMapping
(
FILE_MAP_ALL_ACCESS
,
FALSE
,
FALSE
,
szShareMem
);
szShareMem
);
if
(
!
hmap
)
{
if
(
!
hmap
)
{
errno
=
ENOENT
;
errno
=
ENOENT
;
return
-
1
;
return
-
1
;
}
}
}
}
dwRet
=
GetLastError
();
dwRet
=
GetLastError
();
if
(
dwRet
==
ERROR_ALREADY_EXISTS
&&
hmap
&&
(
flag
&
(
IPC_CREAT
|
IPC_EXCL
)))
{
if
(
dwRet
==
ERROR_ALREADY_EXISTS
&&
hmap
&&
(
flag
&
(
IPC_CREAT
|
IPC_EXCL
)))
{
/* Caller wanted to create the segment -- error if already exists */
/* Caller wanted to create the segment -- error if already exists */
CloseHandle
(
hmap
);
CloseHandle
(
hmap
);
errno
=
EEXIST
;
errno
=
EEXIST
;
...
@@ -116,5 +124,5 @@ shmget(int memKey, int size, int flag)
...
@@ -116,5 +124,5 @@ shmget(int memKey, int size, int flag)
return
-
1
;
return
-
1
;
}
}
return
(
int
)
hmap
;
return
(
int
)
hmap
;
}
}
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