Commit c6fcce22 authored by Yoni Fogel's avatar Yoni Fogel

[t:2328] Merge 2328 branch onto main,

some minimal porting

git-svn-id: file:///svn/toku/tokudb@17597 c7de825b-a66e-492c-adef-691d508d4ae1
parent ef06c33f
...@@ -117,7 +117,7 @@ log_print.c log_header.h: log_code.c ...@@ -117,7 +117,7 @@ log_print.c log_header.h: log_code.c
#Needs to be done manually since it does not include newbrt. #Needs to be done manually since it does not include newbrt.
logformat$(BINSUF): logformat.c $(LIBPORTABILITY) logformat$(BINSUF): logformat.c $(LIBPORTABILITY)
$(CC) $< $(BIN_FROM_O_FLAGS_NOLIB) $(LIBPORTABILITY) $(LINK_MUST_BE_LAST) $(CC) $< $(BIN_FROM_O_FLAGS_NOLIB) $(ALWAYS_LINK) $(LINK_MUST_BE_LAST)
libs: $(NEWBRT) $(NEWBRT_BUNDLE) libs: $(NEWBRT) $(NEWBRT_BUNDLE)
......
...@@ -4,15 +4,13 @@ ...@@ -4,15 +4,13 @@
/* See merger.h for a description of this module. */ /* See merger.h for a description of this module. */
#include <toku_portability.h>
#include "brttypes.h"
#include "merger.h" #include "merger.h"
#include <memory.h> #include <memory.h>
#include <toku_assert.h> #include <toku_assert.h>
#include <string.h> #include <string.h>
typedef unsigned char BOOL;
#define TRUE 1
#define FALSE 0
struct merger { struct merger {
int n_files; int n_files;
FILE **files; FILE **files;
...@@ -84,7 +82,7 @@ static int merge_fill_dbt (MERGER m, int i) ...@@ -84,7 +82,7 @@ static int merge_fill_dbt (MERGER m, int i)
} }
// Got something, so we should be able to get the rest. // Got something, so we should be able to get the rest.
if (m->keys[i].ulen < keylen) { if (m->keys[i].ulen < keylen) {
REALLOC_N(keylen, m->keys[i].data); m->keys[i].data = toku_xrealloc(m->keys[i].data, keylen);
m->keys[i].ulen = keylen; m->keys[i].ulen = keylen;
} }
{ {
...@@ -97,7 +95,7 @@ static int merge_fill_dbt (MERGER m, int i) ...@@ -97,7 +95,7 @@ static int merge_fill_dbt (MERGER m, int i)
assert(n==1); assert(n==1);
} }
if (m->vals[i].ulen < vallen) { if (m->vals[i].ulen < vallen) {
REALLOC_N(vallen, m->vals[i].data); m->vals[i].data = toku_xrealloc(m->vals[i].data, vallen);
m->vals[i].ulen = vallen; m->vals[i].ulen = vallen;
} }
{ {
......
...@@ -381,7 +381,7 @@ static int add222_fetch (CACHEFILE cf, CACHEKEY key, u_int32_t fullhash, void ** ...@@ -381,7 +381,7 @@ static int add222_fetch (CACHEFILE cf, CACHEKEY key, u_int32_t fullhash, void **
return 0; return 0;
} }
#if !defined(_WIN32) #if !TOKU_WINDOWS
static void test_multi_filehandles (void) { static void test_multi_filehandles (void) {
CACHETABLE t; CACHETABLE t;
...@@ -721,7 +721,7 @@ test_main (int argc, const char *argv[]) { ...@@ -721,7 +721,7 @@ test_main (int argc, const char *argv[]) {
test_mutex_init(); test_mutex_init();
// run tests // run tests
#if !defined(_WIN32) #if !TOKU_WINDOWS
test_multi_filehandles(); test_multi_filehandles();
#endif #endif
test_cachetable_create(); test_cachetable_create();
...@@ -732,7 +732,7 @@ test_main (int argc, const char *argv[]) { ...@@ -732,7 +732,7 @@ test_main (int argc, const char *argv[]) {
for (i=0; i<1; i++) { for (i=0; i<1; i++) {
test0(); test0();
test_nested_pin(); test_nested_pin();
#if !defined(_WIN32) #if !TOKU_WINDOWS
test_multi_filehandles (); test_multi_filehandles ();
#endif #endif
test_dirty(); test_dirty();
......
...@@ -45,23 +45,22 @@ LIBRARIES+= \ ...@@ -45,23 +45,22 @@ LIBRARIES+= \
$(LIBRARY_S) \ $(LIBRARY_S) \
#Purposely here for \ at end of prev #Purposely here for \ at end of prev
INSTALL_LIBRARIES= $(patsubst %,%.install,$(LIBRARIES))
ifeq ($(OS_CHOICE),windows)
INSTALL_LIBRARIES += libtokudb.pdb.install
endif
ifeq ($(OS_CHOICE),windows) ifeq ($(OS_CHOICE),windows)
#Does not support parallel builds for files in src. #Does not support parallel builds for files in src.
.NOTPARALLEL:; .NOTPARALLEL:;
ifeq ($(DEBUG),0) ifeq ($(DEBUG),0)
WINYDB = $(IPO_YDB) WINYDB = $(IPO_YDB)
else else
WINYDB = $(NOIPO_YDB) WINYDB = $(NOIPO_YDB)
endif endif
LIBRARIES += $(WINYDB) LIBRARIES += $(WINYDB)
libtokudb.pdb : $(WINYDB); libtokudb.pdb : $(WINYDB);
endif endif
INSTALL_LIBRARIES= $(patsubst %,%.install,$(LIBRARIES))
ifeq ($(OS_CHOICE),windows)
INSTALL_LIBRARIES += libtokudb.pdb.install
endif
.PHONY:install_libs install.% build install local build_tests .PHONY:install_libs install.% build install local build_tests
...@@ -84,9 +83,12 @@ install: libs install_libs ; ...@@ -84,9 +83,12 @@ install: libs install_libs ;
.PHONY: local libs buildlocktrees .PHONY: local libs buildlocktrees
libs: $(LIBRARIES) ; libs: $(LIBRARIES) ;
$(IPO_YDB) $(NOIPO_YDB) $(LIBRARIES): | export.def $(IPO_YDB) $(NOIPO_YDB) $(LIBRARIES): | export.def
export.def: export.map
#Generate export.def
#Take everything from export.map, add snprintf and vsnprintf, and then convert into export.def format.
export.def: export.map Makefile
echo "EXPORTS" > $@ echo "EXPORTS" > $@
cat export.map |sed -n "s/\([a-zA-Z_0-9][a-zA-Z_0-9]*\);/\t\1 @/g;/@/ P" |sed -n 'P;=' | sed '{;N;s/\n//;}' >> $@ cat export.map | sed 's/global:$$/global:\n snprintf;\n usleep;/' | sed -n "s/\([a-zA-Z_0-9][a-zA-Z_0-9]*\);/\t\1 @/g;/@/ P" |sort | sed -n 'P;=' | sed '{;N;s/\n//;}' >> $@
echo "" >> $@ echo "" >> $@
buildlocktrees: $(LOCKTREE) $(RANGETREE) ; buildlocktrees: $(LOCKTREE) $(RANGETREE) ;
...@@ -133,6 +135,7 @@ strip: $(LIBRARY) ...@@ -133,6 +135,7 @@ strip: $(LIBRARY)
strip $< strip $<
clean: clean:
rm -f export.def
cd tests && $(MAKE) clean cd tests && $(MAKE) clean
cd lock_tree && $(MAKE) clean cd lock_tree && $(MAKE) clean
cd range_tree && $(MAKE) clean cd range_tree && $(MAKE) clean
...@@ -164,7 +164,7 @@ toku_ydb_lock(void) { ...@@ -164,7 +164,7 @@ toku_ydb_lock(void) {
t = MAX_SLEEP; t = MAX_SLEEP;
(void) toku_sync_fetch_and_increment_uint64(&status.times_max_sleep_used); (void) toku_sync_fetch_and_increment_uint64(&status.times_max_sleep_used);
} }
#if !TOKU_WINDOWS || TOKU_WINDOWS_HAS_FAST_ATOMIC_64 #if !TOKU_WINDOWS || TOKU_WINDOWS_HAS_ATOMIC_64
(void) toku_sync_fetch_and_add_uint64(&status.total_sleep_time, t); (void) toku_sync_fetch_and_add_uint64(&status.total_sleep_time, t);
#endif #endif
(void) toku_sync_fetch_and_increment_uint64(&status.total_sleepers); (void) toku_sync_fetch_and_increment_uint64(&status.total_sleepers);
......
...@@ -56,6 +56,9 @@ ...@@ -56,6 +56,9 @@
toku_os_full_write; toku_os_full_write;
toku_os_full_pwrite; toku_os_full_pwrite;
toku_os_get_max_process_data_size;
toku_os_get_phys_memory_size;
local: *; local: *;
}; };
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
* a REFERENCE IMPLEMENTATION of the loader * a REFERENCE IMPLEMENTATION of the loader
*/ */
#include <toku_portability.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "ydb-internal.h" #include "ydb-internal.h"
......
...@@ -188,7 +188,7 @@ random_acts(void * d) { ...@@ -188,7 +188,7 @@ random_acts(void * d) {
} }
#if IS_TDB && !defined(_WIN32) && !defined(_WIN64) #if IS_TDB && !TOKU_WINDOWS
return intothevoid; return intothevoid;
#endif #endif
} }
......
...@@ -21,7 +21,7 @@ static void __attribute__((destructor)) libtokudb_destroy(void) { ...@@ -21,7 +21,7 @@ static void __attribute__((destructor)) libtokudb_destroy(void) {
#endif #endif
#if defined(_WIN32) || defined(_WIN64) #if TOKU_WINDOWS
#include <windows.h> #include <windows.h>
#define UNUSED(x) x=x #define UNUSED(x) x=x
......
...@@ -218,28 +218,31 @@ ifeq ($(CC),icc) ...@@ -218,28 +218,31 @@ ifeq ($(CC),icc)
SYMBOLS= -g -debug all -inline-debug-info SYMBOLS= -g -debug all -inline-debug-info
PORTABILITY=-diag-enable port-win PORTABILITY=-diag-enable port-win
AR=xiar AR=xiar
DISABLE_WARNING=
ifneq ($(CYGWIN),) ifneq ($(CYGWIN),)
#Cygwin #Cygwin
ICC_NOWARN=-Qdiag-disable: ICC_NOWARN=-Qdiag-disable:
SKIP_WARNING += $(ICC_NOWARN)869 # Don't complain about unused variables (since we defined __attribute__ to be nothing.) DISABLE_WARNING +=869# Don't complain about unused variables (since we defined __attribute__ to be nothing.)
SKIP_WARNING += $(ICC_NOWARN)593 # Don't complain about unused variables (since we defined __attribute__ to be nothing.) DISABLE_WARNING +=593# Don't complain about unused variables (since we defined __attribute__ to be nothing.)
SKIP_WARNING += $(ICC_NOWARN)11000 # Disable message about multi-file optimization DISABLE_WARNING +=11000# Disable message about multi-file optimization
SKIP_WARNING += $(ICC_NOWARN)11000 # Disable message about single-file optimization DISABLE_WARNING +=11000# Disable message about single-file optimization
SKIP_WARNING += $(ICC_NOWARN)11005 # Disable message about creating object file DISABLE_WARNING +=11005# Disable message about creating object file
SKIP_WARNING += $(ICC_NOWARN)188 # Disable message about 0 used for enum DISABLE_WARNING +=188# Disable message about 0 used for enum
SKIP_WARNING += $(ICC_NOWARN)1011 # Disable message about missing return with an abort DISABLE_WARNING +=1011# Disable message about missing return with an abort
else else
#Linux #Linux
ICC_NOWARN=-diag-disable #Need the space ICC_NOWARN=-diag-disable #Need the space
endif endif
SKIP_WARNING += $(ICC_NOWARN)810 # Remove warnings about losing precision DISABLE_WARNING +=810# Remove warnings about losing precision
SKIP_WARNING += $(ICC_NOWARN)94 # Allow arrays of length 0 DISABLE_WARNING +=94# Allow arrays of length 0
SKIP_WARNING += $(ICC_NOWARN)118 # Allow void functions to return void functions DISABLE_WARNING +=118# Allow void functions to return void functions
SKIP_WARNING += $(ICC_NOWARN)177 # Don't complain about static variables that are not used. DISABLE_WARNING +=177# Don't complain about static variables that are not used.
#SKIP_WARNING += $(ICC_NOWARN)188 # Don't complain about enumerated type mixed with another type. #DISABLE_WARNING +=188# Don't complain about enumerated type mixed with another type.
SKIP_WARNING += $(ICC_NOWARN)589 # Don't complain about goto into a block that skips initializing variables. GCC catches the actual uninitialized variables. DISABLE_WARNING +=589# Don't complain about goto into a block that skips initializing variables. GCC catches the actual uninitialized variables.
SKIP_WARNING += $(ICC_NOWARN)981 # Don't complain about "operands are evaluated in unspecified order". This seems to be generated whenever more than one argument to a function or operand is computed by function call. DISABLE_WARNING +=981# Don't complain about "operands are evaluated in unspecified order". This seems to be generated whenever more than one argument to a function or operand is computed by function call.
SKIP_WARNING += $(ICC_NOWARN)1324 # Don't complain about rdtsc clobbering its registers more than once. DISABLE_WARNING +=1324# Don't complain about rdtsc clobbering its registers more than once.
DISABLE_WARNING +=1786# Don't complain about 'read/write/other standards' being deprecated
SKIP_WARNING = $(ICC_NOWARN)$(shell sed 's/ /,/g' <<< "$(DISABLE_WARNING)" | sed 's/,//')
endif endif
ifneq ($(CC),icc) ifneq ($(CC),icc)
...@@ -291,7 +294,6 @@ ifneq ($(CYGWIN),) ...@@ -291,7 +294,6 @@ ifneq ($(CYGWIN),)
WERROR += -Qdiag-error:167,266,810,592 # Workarounds for -WX not being complete on windows icc WERROR += -Qdiag-error:167,266,810,592 # Workarounds for -WX not being complete on windows icc
SYMBOLS= -Zi -debug:all -Qinline-debug-info SYMBOLS= -Zi -debug:all -Qinline-debug-info
PORTABILITY= PORTABILITY=
SKIP_WARNING += $(ICC_NOWARN)1786 # Don't complain about 'read/write/other standards' being deprecated
PORTABILITY_HEADERS = $(TOKUROOT)windows PORTABILITY_HEADERS = $(TOKUROOT)windows
AR=xilib AR=xilib
DBG_AROPT=-qnoipo DBG_AROPT=-qnoipo
......
...@@ -19,20 +19,20 @@ toku_sync_fetch_and_decrement_int32(volatile int32_t *a) { ...@@ -19,20 +19,20 @@ toku_sync_fetch_and_decrement_int32(volatile int32_t *a) {
} }
#define TOKU_WINDOWS_MIN_SUPPORTED_IS_VISTA 0 #define TOKU_WINDOWS_MIN_SUPPORTED_IS_VISTA 0
//Vista has 64 bit atomic instruction functions. //Vista has 64 bit atomic instruction functions.
//64 bit windows should also have it, but we're using neither right now. //64 bit windows should also have it, but we're using neither right now.
#if TOKU_WINDOWS_MIN_SUPPORTED_IS_VISTA #if TOKU_WINDOWS_MIN_SUPPORTED_IS_VISTA || defined(_WIN64)
#define TOKU_WINDOWS_HAS_FAST_ATOMIC_64 1 #define TOKU_WINDOWS_HAS_ATOMIC_64 1
#else #else
#define TOKU_WINDOWS_HAS_FAST_ATOMIC_64 0 #define TOKU_WINDOWS_HAS_ATOMIC_64 0
#endif #endif
static inline uint64_t static inline uint64_t
toku_sync_fetch_and_add_uint64(volatile uint64_t *a, uint64_t b) { toku_sync_fetch_and_add_uint64(volatile uint64_t *a, uint64_t b) {
#if TOKU_WINDOWS_MIN_SUPPORTED_IS_VISTA #if TOKU_WINDOWS_HAS_ATOMIC_64
//Need Vista or later for this function to exist.
return _InterlockedExchangeAdd64((int64_t*)a, b); return _InterlockedExchangeAdd64((int64_t*)a, b);
#else #else
//Temporarily just use 32 bit atomic instructions (treat the values as 32 //Temporarily just use 32 bit atomic instructions (treat the values as 32
...@@ -44,8 +44,7 @@ toku_sync_fetch_and_add_uint64(volatile uint64_t *a, uint64_t b) { ...@@ -44,8 +44,7 @@ toku_sync_fetch_and_add_uint64(volatile uint64_t *a, uint64_t b) {
static inline uint64_t static inline uint64_t
toku_sync_fetch_and_increment_uint64(volatile uint64_t *a) { toku_sync_fetch_and_increment_uint64(volatile uint64_t *a) {
#if TOKU_WINDOWS_MIN_SUPPORTED_IS_VISTA #if TOKU_WINDOWS_HAS_ATOMIC_64
//Need Vista or later for this function to exist.
return _InterlockedIncrement64((int64_t*)a); return _InterlockedIncrement64((int64_t*)a);
#else #else
//Temporarily just use 32 bit atomic instructions (treat the values as 32 //Temporarily just use 32 bit atomic instructions (treat the values as 32
......
...@@ -23,7 +23,7 @@ int toku_os_get_number_active_processors(void); ...@@ -23,7 +23,7 @@ int toku_os_get_number_active_processors(void);
int toku_os_get_pagesize(void); int toku_os_get_pagesize(void);
// Returns: the size of physical memory (in bytes) // Returns: the size of physical memory (in bytes)
uint64_t toku_os_get_phys_memory_size(void); uint64_t toku_os_get_phys_memory_size(void) __attribute__((__visibility__("default")));
// Returns the processor frequency in Hz // Returns the processor frequency in Hz
// Returns 0 if success // Returns 0 if success
...@@ -58,7 +58,7 @@ int toku_os_get_max_rss(int64_t *maxrss); ...@@ -58,7 +58,7 @@ int toku_os_get_max_rss(int64_t *maxrss);
// Get the maximum size of the process data size (in bytes) // Get the maximum size of the process data size (in bytes)
// Success: returns 0 and sets *maxdata to the data size // Success: returns 0 and sets *maxdata to the data size
// Fail: returns an error number // Fail: returns an error number
int toku_os_get_max_process_data_size(uint64_t *maxdata); int toku_os_get_max_process_data_size(uint64_t *maxdata) __attribute__((__visibility__("default")));
int toku_os_initialize_settings(int verbosity) __attribute__((__visibility__("default"))); int toku_os_initialize_settings(int verbosity) __attribute__((__visibility__("default")));
...@@ -67,7 +67,7 @@ int toku_os_initialize_settings(int verbosity) __attribute__((__visibility__("d ...@@ -67,7 +67,7 @@ int toku_os_initialize_settings(int verbosity) __attribute__((__visibility__("d
// //
int toku_os_is_absolute_name(const char* path) __attribute__((__visibility__("default"))); int toku_os_is_absolute_name(const char* path) __attribute__((__visibility__("default")));
#if defined(TOKU_WINDOWS) && TOKU_WINDOWS #if TOKU_WINDOWS
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
//Test if st_mode (from stat) is a directory //Test if st_mode (from stat) is a directory
......
...@@ -239,14 +239,14 @@ resend_signals(void) { ...@@ -239,14 +239,14 @@ resend_signals(void) {
} }
#include <memory.h> #include <memory.h>
#if IS_TDB && !defined(_WIN32) && !defined(_WIN64) && TDB_IS_STATIC #if IS_TDB && !TOKU_WINDOWS && TDB_IS_STATIC
#include <ydb.h> #include <ydb.h>
#endif #endif
static int test_main (int argc, char *argv[]); static int test_main (int argc, char *argv[]);
int int
main(int argc, char *argv[]) { main(int argc, char *argv[]) {
int r; int r;
#if IS_TDB && !defined(_WIN32) && !defined(_WIN64) && TDB_IS_STATIC #if IS_TDB && !TOKU_WINDOWS && TDB_IS_STATIC
toku_ydb_init(); toku_ydb_init();
#endif #endif
#if !IS_TDB && DB_VERSION_MINOR==4 && DB_VERSION_MINOR == 7 #if !IS_TDB && DB_VERSION_MINOR==4 && DB_VERSION_MINOR == 7
...@@ -255,7 +255,7 @@ main(int argc, char *argv[]) { ...@@ -255,7 +255,7 @@ main(int argc, char *argv[]) {
r = db_env_set_func_realloc(toku_realloc); assert(r==0); r = db_env_set_func_realloc(toku_realloc); assert(r==0);
#endif #endif
r = test_main(argc, argv); r = test_main(argc, argv);
#if IS_TDB && !defined(_WIN32) && !defined(_WIN64) && TDB_IS_STATIC #if IS_TDB && !TOKU_WINDOWS && TDB_IS_STATIC
toku_ydb_destroy(); toku_ydb_destroy();
#endif #endif
return r; return r;
......
...@@ -171,7 +171,7 @@ static int test_main (int argc, char *argv[]) { ...@@ -171,7 +171,7 @@ static int test_main (int argc, char *argv[]) {
} }
sort_delimiter[0] = (char)temp; sort_delimiter[0] = (char)temp;
sort_delimiter[1] = '\0'; sort_delimiter[1] = '\0';
#if defined(TOKU_WINDOWS) && TOKU_WINDOWS #if TOKU_WINDOWS
if (!strcmp(sort_delimiter, "\n")) { if (!strcmp(sort_delimiter, "\n")) {
strcpy(sort_delimiter, "\r\n"); strcpy(sort_delimiter, "\r\n");
} }
......
...@@ -194,14 +194,14 @@ static int (*t_fsync)(int) = 0; ...@@ -194,14 +194,14 @@ static int (*t_fsync)(int) = 0;
static uint64_t toku_fsync_count; static uint64_t toku_fsync_count;
static uint64_t toku_fsync_time; static uint64_t toku_fsync_time;
#if !TOKU_WINDOWS_HAS_FAST_ATOMIC_64 #if !TOKU_WINDOWS_HAS_ATOMIC_64
static toku_pthread_mutex_t fsync_lock; static toku_pthread_mutex_t fsync_lock;
#endif #endif
int int
toku_fsync_init(void) { toku_fsync_init(void) {
int r = 0; int r = 0;
#if !TOKU_WINDOWS_HAS_FAST_ATOMIC_64 #if !TOKU_WINDOWS_HAS_ATOMIC_64
r = toku_pthread_mutex_init(&fsync_lock, NULL); assert(r == 0); r = toku_pthread_mutex_init(&fsync_lock, NULL); assert(r == 0);
#endif #endif
return r; return r;
...@@ -210,7 +210,7 @@ toku_fsync_init(void) { ...@@ -210,7 +210,7 @@ toku_fsync_init(void) {
int int
toku_fsync_destroy(void) { toku_fsync_destroy(void) {
int r = 0; int r = 0;
#if !TOKU_WINDOWS_HAS_FAST_ATOMIC_64 #if !TOKU_WINDOWS_HAS_ATOMIC_64
r = toku_pthread_mutex_destroy(&fsync_lock); assert(r == 0); r = toku_pthread_mutex_destroy(&fsync_lock); assert(r == 0);
#endif #endif
return r; return r;
...@@ -240,7 +240,7 @@ toku_file_fsync(int fd) { ...@@ -240,7 +240,7 @@ toku_file_fsync(int fd) {
if (r) if (r)
assert(errno==EINTR); assert(errno==EINTR);
} }
#if TOKU_WINDOWS_HAS_FAST_ATOMIC_64 #if TOKU_WINDOWS_HAS_ATOMIC_64
toku_sync_fetch_and_increment_uint64(&toku_fsync_count); toku_sync_fetch_and_increment_uint64(&toku_fsync_count);
toku_sync_fetch_and_add_uint64(&toku_fsync_time, get_tnow() - tstart); toku_sync_fetch_and_add_uint64(&toku_fsync_time, get_tnow() - tstart);
#else #else
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
* See the README file for an explanation of the pthreads-win32 version * See the README file for an explanation of the pthreads-win32 version
* numbering scheme and how the DLL is named etc. * numbering scheme and how the DLL is named etc.
*/ */
#define PTW32_VERSION 2,8,0,0 #define PTW32_VERSION 2,9,0,0
#define PTW32_VERSION_STRING "2, 8, 0, 0\0" #define PTW32_VERSION_STRING "2, 9, 0, 0\0"
/* There are three implementations of cancel cleanup. /* There are three implementations of cancel cleanup.
* Note that pthread.h is included in both application * Note that pthread.h is included in both application
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
#define PTW32_LEVEL_MAX 3 #define PTW32_LEVEL_MAX 3
#if !defined(PTW32_LEVEL) #if ( defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112 ) || !defined(PTW32_LEVEL)
#define PTW32_LEVEL PTW32_LEVEL_MAX #define PTW32_LEVEL PTW32_LEVEL_MAX
/* Include everything */ /* Include everything */
#endif #endif
...@@ -210,9 +210,6 @@ typedef unsigned long DWORD_PTR; ...@@ -210,9 +210,6 @@ typedef unsigned long DWORD_PTR;
* ----------------- * -----------------
*/ */
//IF YOU GET AN ERROR on HAVE_CONFIG_H:
//You used #include "toku_portability.h" <-- WRONG
//instead of #include <toku_portability.h> <-- CORRECT
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
#include "config.h" #include "config.h"
#endif /* HAVE_CONFIG_H */ #endif /* HAVE_CONFIG_H */
...@@ -308,7 +305,7 @@ enum { ...@@ -308,7 +305,7 @@ enum {
#ifndef HAVE_STRUCT_TIMESPEC #ifndef HAVE_STRUCT_TIMESPEC
#define HAVE_STRUCT_TIMESPEC 1 #define HAVE_STRUCT_TIMESPEC 1
struct timespec { struct timespec {
long tv_sec; time_t tv_sec;
long tv_nsec; long tv_nsec;
}; };
#endif /* HAVE_STRUCT_TIMESPEC */ #endif /* HAVE_STRUCT_TIMESPEC */
...@@ -902,13 +899,13 @@ PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedparam (pthread_attr_t *attr, ...@@ -902,13 +899,13 @@ PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedparam (pthread_attr_t *attr,
PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedpolicy (pthread_attr_t *, PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedpolicy (pthread_attr_t *,
int); int);
PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedpolicy (pthread_attr_t *, PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedpolicy (const pthread_attr_t *,
int *); int *);
PTW32_DLLPORT int PTW32_CDECL pthread_attr_setinheritsched(pthread_attr_t * attr, PTW32_DLLPORT int PTW32_CDECL pthread_attr_setinheritsched(pthread_attr_t * attr,
int inheritsched); int inheritsched);
PTW32_DLLPORT int PTW32_CDECL pthread_attr_getinheritsched(pthread_attr_t * attr, PTW32_DLLPORT int PTW32_CDECL pthread_attr_getinheritsched(const pthread_attr_t * attr,
int * inheritsched); int * inheritsched);
PTW32_DLLPORT int PTW32_CDECL pthread_attr_setscope (pthread_attr_t *, PTW32_DLLPORT int PTW32_CDECL pthread_attr_setscope (pthread_attr_t *,
...@@ -987,7 +984,7 @@ PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setpshared (pthread_mutexattr_t ...@@ -987,7 +984,7 @@ PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setpshared (pthread_mutexattr_t
int pshared); int pshared);
PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_settype (pthread_mutexattr_t * attr, int kind); PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_settype (pthread_mutexattr_t * attr, int kind);
PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_gettype (pthread_mutexattr_t * attr, int *kind); PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_gettype (const pthread_mutexattr_t * attr, int *kind);
/* /*
* Barrier Attribute Functions * Barrier Attribute Functions
...@@ -1187,6 +1184,10 @@ PTW32_DLLPORT void * PTW32_CDECL pthread_timechange_handler_np(void *); ...@@ -1187,6 +1184,10 @@ PTW32_DLLPORT void * PTW32_CDECL pthread_timechange_handler_np(void *);
* Returns the Win32 HANDLE for the POSIX thread. * Returns the Win32 HANDLE for the POSIX thread.
*/ */
PTW32_DLLPORT HANDLE PTW32_CDECL pthread_getw32threadhandle_np(pthread_t thread); PTW32_DLLPORT HANDLE PTW32_CDECL pthread_getw32threadhandle_np(pthread_t thread);
/*
* Returns the win32 thread ID for POSIX thread.
*/
PTW32_DLLPORT DWORD PTW32_CDECL pthread_getw32threadid_np (pthread_t thread);
/* /*
...@@ -1248,13 +1249,19 @@ PTW32_DLLPORT int PTW32_CDECL pthreadCancelableTimedWait (HANDLE waitHandle, ...@@ -1248,13 +1249,19 @@ PTW32_DLLPORT int PTW32_CDECL pthreadCancelableTimedWait (HANDLE waitHandle,
( strcpy( (_buf), ctime( (_clock) ) ), \ ( strcpy( (_buf), ctime( (_clock) ) ), \
(_buf) ) (_buf) )
/*
* gmtime(tm) and localtime(tm) return 0 if tm represents
* a time prior to 1/1/1970.
*/
#define gmtime_r( _clock, _result ) \ #define gmtime_r( _clock, _result ) \
( *(_result) = *gmtime( (_clock) ), \ ( gmtime( (_clock) ) \
(_result) ) ? (*(_result) = *gmtime( (_clock) ), (_result) ) \
: (0) )
#define localtime_r( _clock, _result ) \ #define localtime_r( _clock, _result ) \
( *(_result) = *localtime( (_clock) ), \ ( localtime( (_clock) ) \
(_result) ) ? (*(_result) = *localtime( (_clock) ), (_result) ) \
: (0) )
#define rand_r( _seed ) \ #define rand_r( _seed ) \
( _seed == _seed? rand() : rand() ) ( _seed == _seed? rand() : rand() )
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
#define PTW32_LEVEL_MAX 3 #define PTW32_LEVEL_MAX 3
#if !defined(PTW32_LEVEL) #if ( defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112 ) || !defined(PTW32_LEVEL)
#define PTW32_LEVEL PTW32_LEVEL_MAX #define PTW32_LEVEL PTW32_LEVEL_MAX
/* Include everything */ /* Include everything */
#endif #endif
...@@ -114,12 +114,14 @@ ...@@ -114,12 +114,14 @@
#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ #endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
#if defined(__MINGW32__) || defined(_UWIN) #if defined(__MINGW32__) || defined(_UWIN)
#if PTW32_LEVEL >= PTW32_LEVEL_MAX # if PTW32_LEVEL >= PTW32_LEVEL_MAX
/* For pid_t */ /* For pid_t */
# include <sys/types.h> # include <sys/types.h>
/* Required by Unix 98 */ /* Required by Unix 98 */
# include <time.h> # include <time.h>
#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ # else
typedef int pid_t;
# endif
#else #else
typedef int pid_t; typedef int pid_t;
#endif #endif
......
@echo off
call "C:\Program Files (x86)\Intel\Compiler\C++\10.1.032\EM64T\Bin\ICLVars.bat"
C:
chdir C:\cygwin\bin
bash --login -i %*
#!/usr/bin/bash
#Install BDB
echo Installing BDB if necessary ...
if ! test -d /usr/local/BerkeleyDB.4.6 ; then
(
echo "BDB is missing. Downloading from svn" &&
cd /usr/local &&
svn co -q https://svn.tokutek.com/tokudb/berkeleydb/windows/amd64/BerkeleyDB.4.6
) || { echo Failed; exit 1; }
fi
if ! grep 'export BDB=' ~/.bashrc > /dev/null; then
echo "Adding 'export BDB=/usr/local/BerkeleyDB.4.6' to ~/.bashrc"
echo 'export BDB=/usr/local/BerkeleyDB.4.6' >> ~/.bashrc
fi
if ! grep 'export BDBDIR=' ~/.bashrc > /dev/null; then
echo "Adding 'export BDBDIR=C:/cygwin/usr/local/BerkeleyDB.4.6'' to ~/.bashrc"
echo 'export BDBDIR=C:/cygwin/usr/local/BerkeleyDB.4.6' >> ~/.bashrc
fi
echo Done installing BDB.
echo
#Install licenses.
if ! test -e ../licenses/install_licenses_amd64.bat; then
echo Missing ../licenses directory.
exit 1
fi
echo Installing licenses...
(cd ../licenses && cmd /c install_licenses_amd64.bat)
echo Done installing licenses.
echo
#install icc integration
(
cd amd64 &&
if ! diff -q Cygwin.bat /cygdrive/c/cygwin/Cygwin.bat > /dev/null; then
cp Cygwin.bat /cygdrive/c/cygwin/
fi
)
if ! grep 'export CC=' ~/.bashrc > /dev/null; then
echo "Adding 'export CC=icc' to ~/.bashrc"
echo 'export CC=icc' >> ~/.bashrc
fi
if ! grep 'export CYGWIN=' ~/.bashrc > /dev/null; then
echo "Adding 'export CYGWIN=CYGWIN' to ~/.bashrc"
echo 'export CYGWIN=CYGWIN' >> ~/.bashrc
fi
#cygwin link is in the way
if test -e /usr/bin/link; then
mv /usr/bin/link /usr/bin/link_DISABLED
fi
#cygwin cmake is in the way
if test -e /usr/bin/cmake; then
mv /usr/bin/cmake /usr/bin/cmake_DISABLED
fi
#Set up aliases
( cd amd64/symlinks && cp -d * /usr/local/bin/ )
echo You can now install the intel compiler.
echo You must restart cygwin after intel compiler is installed.
echo If the intel compiler is already installed, just restart cygwin.
#!/bin/bash
mkdir -p /usr/local/BerkeleyDB.$1/bin
mkdir -p /usr/local/BerkeleyDB.$1/lib
ln -s /usr/bin/db$1_load.exe /usr/local/BerkeleyDB.$1/bin/db_load
ln -s /usr/bin/db$1_dump.exe /usr/local/BerkeleyDB.$1/bin/db_dump
ln -s /usr/include/db /usr/local/BerkeleyDB.$1/include
ln -s /usr/lib/libdb-.a /usr/local/BerkeleyDB.$1/lib/libdb.a
ln -s /usr/lib/libdb-.dll.a /usr/local/BerkeleyDB.$1/lib/libdb.dll.a
ln -s /usr/lib/libdb-.la /usr/local/BerkeleyDB.$1/lib/libdb.la
ln -s /usr/lib/libdb_cxx-.la /usr/local/BerkeleyDB.$1/lib/libdb_cxx.la
ln -s /usr/lib/libdb_cxx-.a /usr/local/BerkeleyDB.$1/lib/libdb_cxx.a
ln -s /usr/lib/libdb_cxx-.dll.a /usr/local/BerkeleyDB.$1/lib/libdb_cxx.dll.a
/*
* Module: semaphore.h
*
* Purpose:
* Semaphores aren't actually part of the PThreads standard.
* They are defined by the POSIX Standard:
*
* POSIX 1003.1b-1993 (POSIX.1b)
*
* --------------------------------------------------------------------------
*
* Pthreads-win32 - POSIX Threads Library for Win32
* Copyright(C) 1998 John E. Bossom
* Copyright(C) 1999,2005 Pthreads-win32 contributors
*
* Contact Email: rpj@callisto.canberra.edu.au
*
* The current list of contributors is contained
* in the file CONTRIBUTORS included with the source
* code distribution. The list can also be seen at the
* following World Wide Web location:
* http://sources.redhat.com/pthreads-win32/contributors.html
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library in the file COPYING.LIB;
* if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined( SEMAPHORE_H )
#define SEMAPHORE_H
#undef PTW32_LEVEL
#if defined(_POSIX_SOURCE)
#define PTW32_LEVEL 0
/* Early POSIX */
#endif
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
#undef PTW32_LEVEL
#define PTW32_LEVEL 1
/* Include 1b, 1c and 1d */
#endif
#if defined(INCLUDE_NP)
#undef PTW32_LEVEL
#define PTW32_LEVEL 2
/* Include Non-Portable extensions */
#endif
#define PTW32_LEVEL_MAX 3
#if !defined(PTW32_LEVEL)
#define PTW32_LEVEL PTW32_LEVEL_MAX
/* Include everything */
#endif
#if __GNUC__ && ! defined (__declspec)
# error Please upgrade your GNU compiler to one that supports __declspec.
#endif
/*
* When building the DLL code, you should define PTW32_BUILD so that
* the variables/functions are exported correctly. When using the DLL,
* do NOT define PTW32_BUILD, and then the variables/functions will
* be imported correctly.
*/
#ifndef PTW32_STATIC_LIB
# ifdef PTW32_BUILD
# define PTW32_DLLPORT __declspec (dllexport)
# else
# define PTW32_DLLPORT __declspec (dllimport)
# endif
#else
# define PTW32_DLLPORT
#endif
/*
* This is a duplicate of what is in the autoconf config.h,
* which is only used when building the pthread-win32 libraries.
*/
#ifndef PTW32_CONFIG_H
# if defined(WINCE)
# define NEED_ERRNO
# define NEED_SEM
# endif
# if defined(_UWIN) || defined(__MINGW32__)
# define HAVE_MODE_T
# endif
#endif
/*
*
*/
#if PTW32_LEVEL >= PTW32_LEVEL_MAX
#ifdef NEED_ERRNO
#include "need_errno.h"
#else
#include <errno.h>
#endif
#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
#define _POSIX_SEMAPHORES
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
#ifndef HAVE_MODE_T
typedef unsigned int mode_t;
#endif
typedef struct sem_t_ * sem_t;
PTW32_DLLPORT int __cdecl sem_init (sem_t * sem,
int pshared,
unsigned int value);
PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_timedwait (sem_t * sem,
const struct timespec * abstime);
PTW32_DLLPORT int __cdecl sem_post (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem,
int count);
PTW32_DLLPORT int __cdecl sem_open (const char * name,
int oflag,
mode_t mode,
unsigned int value);
PTW32_DLLPORT int __cdecl sem_close (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_unlink (const char * name);
PTW32_DLLPORT int __cdecl sem_getvalue (sem_t * sem,
int * sval);
#ifdef __cplusplus
} /* End of extern "C" */
#endif /* __cplusplus */
#undef PTW32_LEVEL
#undef PTW32_LEVEL_MAX
#endif /* !SEMAPHORE_H */
...@@ -24,9 +24,9 @@ check: $(BINS) $(RUNTARGETS); ...@@ -24,9 +24,9 @@ check: $(BINS) $(RUNTARGETS);
%.tdbrun: %$(BINSUF) $(PTHREAD_LOCAL) %.tdbrun: %$(BINSUF) $(PTHREAD_LOCAL)
mkdir -p dir.$* mkdir -p dir.$*
ifeq ($(VGRIND),) ifeq ($(VGRIND),)
cd dir.$* && ../$< $(SUMMARIZE_CMD) cd dir.$* && ../$< $(VERBVERBOSE) $(SUMMARIZE_CMD)
else else
cd dir.$* && .$(VGRIND) --log-file=$<.valgrind ../$<; \ cd dir.$* && .$(VGRIND) --log-file=$<.valgrind ../$< $(VERBVERBOSE); \
if [ $$? = 0 ] ; then \ if [ $$? = 0 ] ; then \
grep "LEAK SUMMARY" dir.$*/$<.valgrind >/dev/null 2>&1; \ grep "LEAK SUMMARY" dir.$*/$<.valgrind >/dev/null 2>&1; \
if [ $$? = 0 ] ; then cat dir.$*/$<.valgrind; test 0 = 1; fi \ if [ $$? = 0 ] ; then cat dir.$*/$<.valgrind; test 0 = 1; fi \
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <string.h> #include <string.h>
#include <sys/stat.h> #include <sys/stat.h>
#if 0 && defined _WIN32 #if 0 && TOKU_WINDOWS
#include <windows.h> #include <windows.h>
static int ftruncate(int fd, uint64_t offset) { static int ftruncate(int fd, uint64_t offset) {
HANDLE h = (HANDLE) _get_osfhandle(fd); HANDLE h = (HANDLE) _get_osfhandle(fd);
...@@ -38,8 +38,7 @@ int test_main(int argc, char *argv[]) { ...@@ -38,8 +38,7 @@ int test_main(int argc, char *argv[]) {
for (i=0; i<32; i++) { for (i=0; i<32; i++) {
char junk[4096]; char junk[4096];
memset(junk, 0, sizeof junk); memset(junk, 0, sizeof junk);
r = write(fd, junk, sizeof junk); toku_os_full_write(fd, junk, sizeof junk);
assert(r == sizeof junk);
} }
toku_struct_stat filestat; toku_struct_stat filestat;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include <toku_assert.h> #include <toku_assert.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#ifdef _WIN32 #if TOKU_WINDOWS
#include <io.h> #include <io.h>
#endif #endif
#include <sys/stat.h> #include <sys/stat.h>
...@@ -37,7 +37,7 @@ int test_main(int argc, char *argv[]) { ...@@ -37,7 +37,7 @@ int test_main(int argc, char *argv[]) {
r = close(fd); r = close(fd);
assert(r == 0); assert(r == 0);
#endif #endif
#if defined(_WIN32) #if TOKU_WINDOWS
assert(r == -1); assert(r == -1);
r = close(fd); r = close(fd);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include <toku_assert.h> #include <toku_assert.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#ifdef _WIN32 #if TOKU_WINDOWS
#include <io.h> #include <io.h>
#endif #endif
#include <sys/stat.h> #include <sys/stat.h>
...@@ -35,7 +35,7 @@ int test_main(int argc, char *argv[]) { ...@@ -35,7 +35,7 @@ int test_main(int argc, char *argv[]) {
r = close(fd); r = close(fd);
assert(r == 0); assert(r == 0);
#endif #endif
#if defined(_WIN32) #if TOKU_WINDOWS
assert(r == -1); assert(r == -1);
r = close(fd); r = close(fd);
......
...@@ -33,7 +33,7 @@ int test_main(int argc, char *argv[]) { ...@@ -33,7 +33,7 @@ int test_main(int argc, char *argv[]) {
WSAStartup(MAKEWORD(1, 0), &wsadata); WSAStartup(MAKEWORD(1, 0), &wsadata);
s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
printf("s=%u\n", s); printf("s=%"PRIu64"\n", s);
for (i=0; i<1000; i++) { for (i=0; i<1000; i++) {
if (verbose) { if (verbose) {
......
...@@ -4,9 +4,11 @@ int test_main(int argc, char *argv[]); ...@@ -4,9 +4,11 @@ int test_main(int argc, char *argv[]);
int int
main(int argc, char *argv[]) { main(int argc, char *argv[]) {
toku_portability_init(); int ri = toku_portability_init();
assert(ri==0);
int r = test_main(argc, argv); int r = test_main(argc, argv);
toku_portability_destroy(); int rd = toku_portability_destroy();
assert(rd==0);
return r; return r;
} }
#ifndef _TOKU_HTONL_H #ifndef _TOKU_HTONL_H
#define _TOKU_HTONL_H #define _TOKU_HTONL_H
#if !defined(_WIN32) #if !TOKU_WINDOWS
#error #error
#endif #endif
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
static int static int
toku_malloc_init(void) { toku_malloc_init(void) {
int r = 0; int r = 0;
#if defined(_WIN32)
//Set the heap (malloc/free/realloc) to use the low fragmentation mode. //Set the heap (malloc/free/realloc) to use the low fragmentation mode.
ULONG HeapFragValue = 2; ULONG HeapFragValue = 2;
...@@ -34,6 +35,7 @@ toku_malloc_init(void) { ...@@ -34,6 +35,7 @@ toku_malloc_init(void) {
//if (success==0) //Do some error output if necessary. //if (success==0) //Do some error output if necessary.
if (!success) if (!success)
r = GetLastError(); r = GetLastError();
#endif
return r; return r;
} }
...@@ -174,19 +176,18 @@ toku_os_gettid(void) { ...@@ -174,19 +176,18 @@ toku_os_gettid(void) {
int int
toku_os_get_max_process_data_size(uint64_t *maxdata) { toku_os_get_max_process_data_size(uint64_t *maxdata) {
#ifdef _WIN32 #if defined(_WIN32)
// the process gets 1/2 of the 32 bit address space. // the process gets 1/2 of the 32 bit address space.
// we are ignoring the 3GB feature for now. // we are ignoring the 3GB feature for now.
*maxdata = 1ULL << 31; *maxdata = 1ULL << 31;
return 0; return 0;
#else #elif defined(_WIN64)
#ifdef _WIN64
*maxdata = ~0ULL; *maxdata = ~0ULL;
return 0; return 0;
#else #else
#error
return EINVAL; return EINVAL;
#endif #endif
#endif
} }
int int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment