Skip to content

Commit de4cce7

Browse files
authored
Merge pull request #273 from ldorau/Implement_all_get_page_size_functions_on_Windows
Implement all *_get_page_size() functions on Windows
2 parents 287f3ab + 5bb8b1e commit de4cce7

File tree

4 files changed

+46
-15
lines changed

4 files changed

+46
-15
lines changed

src/base_alloc/base_alloc_windows.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,24 @@
77

88
#include <windows.h>
99

10+
#include "utils_concurrency.h"
11+
12+
static UTIL_ONCE_FLAG Page_size_is_initialized = UTIL_ONCE_FLAG_INIT;
13+
static size_t Page_size;
14+
1015
void *ba_os_alloc(size_t size) {
1116
return VirtualAlloc(NULL, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
1217
}
1318

1419
void ba_os_free(void *ptr, size_t size) { VirtualFree(ptr, 0, MEM_RELEASE); }
1520

16-
size_t ba_os_get_page_size(void) { return 4096; /* TODO */ }
21+
static void _ba_os_init_page_size(void) {
22+
SYSTEM_INFO SystemInfo;
23+
GetSystemInfo(&SystemInfo);
24+
Page_size = SystemInfo.dwPageSize;
25+
}
1726

18-
//
19-
// TODO:
20-
// 1) implement ba_os_get_page_size()
21-
//
27+
size_t ba_os_get_page_size(void) {
28+
util_init_once(&Page_size_is_initialized, _ba_os_init_page_size);
29+
return Page_size;
30+
}

src/utils/utils_common.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@
1414
#include <stdio.h>
1515
#include <stdlib.h>
1616

17-
#ifndef _WIN32
18-
#include <sys/syscall.h>
19-
#include <unistd.h>
20-
#endif
21-
2217
#ifdef __cplusplus
2318
extern "C" {
2419
#endif
@@ -35,15 +30,10 @@ extern "C" {
3530

3631
#define __TLS __declspec(thread)
3732

38-
// TODO: implement util_get_page_size() for Windows
39-
static inline size_t util_get_page_size(void) { return 4096; }
40-
4133
#else /* Linux */
4234

4335
#define __TLS __thread
4436

45-
static inline size_t util_get_page_size(void) { return sysconf(_SC_PAGE_SIZE); }
46-
4737
#endif /* _WIN32 */
4838

4939
// util_env_var - populate the given buffer with the value
@@ -69,6 +59,8 @@ static inline int is_running_in_proxy_lib(void) {
6959
return util_env_var_has_str("LD_PRELOAD", "libumf_proxy.so");
7060
}
7161

62+
size_t util_get_page_size(void);
63+
7264
#define NOFUNCTION \
7365
do { \
7466
} while (0)

src/utils/utils_posix_common.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99

1010
#include <stdlib.h>
1111
#include <string.h>
12+
#include <sys/syscall.h>
13+
#include <unistd.h>
14+
15+
#include "utils_concurrency.h"
16+
17+
static UTIL_ONCE_FLAG Page_size_is_initialized = UTIL_ONCE_FLAG_INIT;
18+
static size_t Page_size;
1219

1320
int util_env_var(const char *envvar, char *buffer, size_t buffer_size) {
1421
char *value = getenv(envvar);
@@ -36,3 +43,10 @@ int util_env_var_has_str(const char *envvar, const char *str) {
3643

3744
return 0;
3845
}
46+
47+
static void _util_get_page_size(void) { Page_size = sysconf(_SC_PAGE_SIZE); }
48+
49+
size_t util_get_page_size(void) {
50+
util_init_once(&Page_size_is_initialized, _util_get_page_size);
51+
return Page_size;
52+
}

src/utils/utils_windows_common.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111

1212
#include <processenv.h>
1313

14+
#include "utils_concurrency.h"
15+
1416
#define BUFFER_SIZE 1024
1517

18+
static UTIL_ONCE_FLAG Page_size_is_initialized = UTIL_ONCE_FLAG_INIT;
19+
static size_t Page_size;
20+
1621
int util_env_var(const char *envvar, char *buffer, size_t buffer_size) {
1722
int ret = GetEnvironmentVariableA(envvar, buffer, (DWORD)buffer_size);
1823
if (ret >= buffer_size) {
@@ -30,3 +35,14 @@ int util_env_var_has_str(const char *envvar, const char *str) {
3035

3136
return 0;
3237
}
38+
39+
static void _util_get_page_size(void) {
40+
SYSTEM_INFO SystemInfo;
41+
GetSystemInfo(&SystemInfo);
42+
Page_size = SystemInfo.dwPageSize;
43+
}
44+
45+
size_t util_get_page_size(void) {
46+
util_init_once(&Page_size_is_initialized, _util_get_page_size);
47+
return Page_size;
48+
}

0 commit comments

Comments
 (0)