diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2015-03-20 01:07:59 -0400 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2015-03-25 13:50:13 -0400 |
commit | 17bd2356a5b17893e626749be399fb8fda23db1e (patch) | |
tree | d7f7ef0425ba516fc617ba6715fb6a06ea2f2a93 | |
parent | a09b0ab2e97a839832e0174871f18353a3303ba3 (diff) | |
download | mongo-17bd2356a5b17893e626749be399fb8fda23db1e.tar.gz |
Use beginthreadex, and ensure we use the correct C calling conventions in all callbacks
-rw-r--r-- | SConstruct | 8 | ||||
-rw-r--r-- | dist/s_string.ok | 1 | ||||
-rw-r--r-- | src/async/async_worker.c | 7 | ||||
-rw-r--r-- | src/btree/bt_slvg.c | 17 | ||||
-rw-r--r-- | src/config/config_collapse.c | 2 | ||||
-rw-r--r-- | src/conn/conn_cache_pool.c | 4 | ||||
-rw-r--r-- | src/conn/conn_ckpt.c | 4 | ||||
-rw-r--r-- | src/conn/conn_log.c | 14 | ||||
-rw-r--r-- | src/conn/conn_stat.c | 4 | ||||
-rw-r--r-- | src/conn/conn_sweep.c | 4 | ||||
-rw-r--r-- | src/evict/evict_lru.c | 16 | ||||
-rw-r--r-- | src/include/extern.h | 8 | ||||
-rw-r--r-- | src/include/os_windows.h | 14 | ||||
-rw-r--r-- | src/include/posix.h | 12 | ||||
-rw-r--r-- | src/lsm/lsm_manager.c | 6 | ||||
-rw-r--r-- | src/lsm/lsm_worker.c | 6 | ||||
-rw-r--r-- | src/meta/meta_ckpt.c | 2 | ||||
-rw-r--r-- | src/os_posix/os_thread.c | 2 | ||||
-rw-r--r-- | src/os_win/os_fallocate.c | 2 | ||||
-rw-r--r-- | src/os_win/os_mtx_cond.c | 4 | ||||
-rw-r--r-- | src/os_win/os_once.c | 2 | ||||
-rw-r--r-- | src/os_win/os_thread.c | 8 | ||||
-rw-r--r-- | src/os_win/os_time.c | 4 | ||||
-rw-r--r-- | src/support/huffman.c | 8 | ||||
-rw-r--r-- | src/txn/txn.c | 2 | ||||
-rw-r--r-- | test/mciproject.yml | 16 | ||||
-rw-r--r-- | test/windows/windows_shim.c | 7 |
27 files changed, 122 insertions, 62 deletions
diff --git a/SConstruct b/SConstruct index 5c4b90992f2..8e9fae28ac6 100644 --- a/SConstruct +++ b/SConstruct @@ -68,7 +68,11 @@ var.Add('CFLAGS', 'C Compiler Flags', [ "/wd4090", # Ignore warning about mismatched const qualifiers "/wd4996", # Ignore deprecated functions "/W3", # Warning level 3 + #"/we4244", # Possible loss of data "/we4013", # Error on undefined functions + #"/we4047", # Indirection differences in types + #"/we4024", # Differences in parameter types + #"/we4100", # Unreferenced local parameter "/TC", # Compile as C code #"/Od", # Disable optimization "/Ob1", # inline expansion @@ -76,7 +80,7 @@ var.Add('CFLAGS', 'C Compiler Flags', [ "/GF", # enable string pooling "/EHsc", # extern "C" does not throw #"/RTC1", # enable stack checks - "/GS", # enable secrutiy checks + "/GS", # enable security checks "/Gy", # separate functions for linker "/Zc:wchar_t", "/Gd", @@ -97,6 +101,8 @@ var.Add('TOOLS', 'SCons tools', [ "textfile" ]) +var.Add('SWIG', 'SWIG binary location', swig_binary) + env = Environment( variables = var ) diff --git a/dist/s_string.ok b/dist/s_string.ok index 8589f50fd21..587cef16c51 100644 --- a/dist/s_string.ok +++ b/dist/s_string.ok @@ -423,6 +423,7 @@ autoheader bInheritHandle basecfg bdb +beginthreadex bigram bitcnt bitfield diff --git a/src/async/async_worker.c b/src/async/async_worker.c index ec68598b8c8..fed917f253a 100644 --- a/src/async/async_worker.c +++ b/src/async/async_worker.c @@ -75,7 +75,8 @@ retry: */ my_slot = my_consume % async->async_qsize; prev_slot = last_consume % async->async_qsize; - *op = WT_ATOMIC_STORE8(async->async_queue[my_slot], NULL); + *op = (WT_ASYNC_OP_IMPL*)WT_ATOMIC_STORE8( + async->async_queue[my_slot], NULL); WT_ASSERT(session, async->cur_queue > 0); WT_ASSERT(session, *op != NULL); @@ -281,7 +282,7 @@ __async_worker_op(WT_SESSION_IMPL *session, WT_ASYNC_OP_IMPL *op, * __async_worker -- * The async worker threads. */ -void * +WT_THREAD_RET /* Quiet style.py */ __wt_async_worker(void *arg) { WT_ASYNC *async; @@ -354,5 +355,5 @@ err: WT_PANIC_MSG(session, ret, "async worker error"); __wt_free(session, ac); ac = acnext; } - return (NULL); + return (WT_THREAD_RET_VALUE); } diff --git a/src/btree/bt_slvg.c b/src/btree/bt_slvg.c index 6f0d4946aa5..ba1802116d0 100644 --- a/src/btree/bt_slvg.c +++ b/src/btree/bt_slvg.c @@ -124,7 +124,7 @@ static int __slvg_col_range_overlap( WT_SESSION_IMPL *, uint32_t, uint32_t, WT_STUFF *); static void __slvg_col_trk_update_start(uint32_t, WT_STUFF *); static int __slvg_merge_block_free(WT_SESSION_IMPL *, WT_STUFF *); -static int __slvg_ovfl_compare(const void *, const void *); +static int WT_CDECL __slvg_ovfl_compare(const void *, const void *); static int __slvg_ovfl_discard(WT_SESSION_IMPL *, WT_STUFF *); static int __slvg_ovfl_reconcile(WT_SESSION_IMPL *, WT_STUFF *); static int __slvg_ovfl_ref(WT_SESSION_IMPL *, WT_TRACK *, int); @@ -140,9 +140,9 @@ static int __slvg_row_range_overlap( WT_SESSION_IMPL *, uint32_t, uint32_t, WT_STUFF *); static int __slvg_row_trk_update_start( WT_SESSION_IMPL *, WT_ITEM *, uint32_t, WT_STUFF *); -static int __slvg_trk_compare_addr(const void *, const void *); -static int __slvg_trk_compare_gen(const void *, const void *); -static int __slvg_trk_compare_key(const void *, const void *); +static int WT_CDECL __slvg_trk_compare_addr(const void *, const void *); +static int WT_CDECL __slvg_trk_compare_gen(const void *, const void *); +static int WT_CDECL __slvg_trk_compare_key(const void *, const void *); static int __slvg_trk_free(WT_SESSION_IMPL *, WT_TRACK **, int); static void __slvg_trk_free_addr(WT_SESSION_IMPL *, WT_TRACK *); static int __slvg_trk_init(WT_SESSION_IMPL *, uint8_t *, @@ -2098,7 +2098,7 @@ __slvg_row_ovfl(WT_SESSION_IMPL *session, * __slvg_trk_compare_addr -- * Compare two WT_TRACK array entries by address cookie. */ -static int +static int WT_CDECL __slvg_trk_compare_addr(const void *a, const void *b) { WT_DECL_RET; @@ -2124,7 +2124,7 @@ __slvg_trk_compare_addr(const void *a, const void *b) * __slvg_ovfl_compare -- * Bsearch comparison routine for the overflow array. */ -static int +static int WT_CDECL __slvg_ovfl_compare(const void *a, const void *b) { WT_ADDR *addr; @@ -2163,6 +2163,7 @@ __slvg_ovfl_reconcile(WT_SESSION_IMPL *session, WT_STUFF *ss) * with the lowest LSNs until overflow pages are only referenced once. * * This requires sorting the page list by LSN, and the overflow array + * by address cookie. */ qsort(ss->pages, @@ -2246,7 +2247,7 @@ err: __wt_free(session, slot); * __slvg_trk_compare_key -- * Compare two WT_TRACK array entries by key, and secondarily, by LSN. */ -static int +static int WT_CDECL __slvg_trk_compare_key(const void *a, const void *b) { WT_SESSION_IMPL *session; @@ -2303,7 +2304,7 @@ __slvg_trk_compare_key(const void *a, const void *b) * __slvg_trk_compare_gen -- * Compare two WT_TRACK array entries by LSN. */ -static int +static int WT_CDECL __slvg_trk_compare_gen(const void *a, const void *b) { WT_TRACK *a_trk, *b_trk; diff --git a/src/config/config_collapse.c b/src/config/config_collapse.c index f54e4fc2074..23cb03c9b3a 100644 --- a/src/config/config_collapse.c +++ b/src/config/config_collapse.c @@ -314,7 +314,7 @@ err: __wt_scr_free(session, &build); * __config_merge_cmp -- * Qsort function: sort the config merge array. */ -static int +static int WT_CDECL __config_merge_cmp(const void *a, const void *b) { WT_CONFIG_MERGE_ENTRY *ae, *be; diff --git a/src/conn/conn_cache_pool.c b/src/conn/conn_cache_pool.c index 7bf090496a8..488864ce351 100644 --- a/src/conn/conn_cache_pool.c +++ b/src/conn/conn_cache_pool.c @@ -596,7 +596,7 @@ __cache_pool_adjust(WT_SESSION_IMPL *session, * __wt_cache_pool_server -- * Thread to manage cache pool among connections. */ -void * +WT_THREAD_RET __wt_cache_pool_server(void *arg) { WT_CACHE *cache; @@ -642,5 +642,5 @@ __wt_cache_pool_server(void *arg) if (0) { err: WT_PANIC_MSG(session, ret, "cache pool manager server error"); } - return (NULL); + return (WT_THREAD_RET_VALUE); } diff --git a/src/conn/conn_ckpt.c b/src/conn/conn_ckpt.c index 503c22110f9..74f27d8bd18 100644 --- a/src/conn/conn_ckpt.c +++ b/src/conn/conn_ckpt.c @@ -69,7 +69,7 @@ err: __wt_scr_free(session, &tmp); * __ckpt_server -- * The checkpoint server thread. */ -static void * +static WT_THREAD_RET __ckpt_server(void *arg) { WT_CONNECTION_IMPL *conn; @@ -112,7 +112,7 @@ __ckpt_server(void *arg) if (0) { err: WT_PANIC_MSG(session, ret, "checkpoint server error"); } - return (NULL); + return (WT_THREAD_RET_VALUE); } /* diff --git a/src/conn/conn_log.c b/src/conn/conn_log.c index 4b995114b09..a6d53134ec2 100644 --- a/src/conn/conn_log.c +++ b/src/conn/conn_log.c @@ -273,7 +273,7 @@ err: * __log_close_server -- * The log close server thread. */ -static void * +static WT_THREAD_RET __log_close_server(void *arg) { WT_CONNECTION_IMPL *conn; @@ -332,7 +332,7 @@ err: __wt_err(session, ret, "log close server error"); } if (locked) __wt_spin_unlock(session, &log->log_sync_lock); - return (NULL); + return (WT_THREAD_RET_VALUE); } /* @@ -347,7 +347,7 @@ typedef struct { * __log_wrlsn_cmp -- * The log wrlsn comparison function for qsort. */ -static int +static int WT_CDECL __log_wrlsn_cmp(const void *a, const void *b) { WT_LOG_WRLSN_ENTRY *ae, *be; @@ -361,7 +361,7 @@ __log_wrlsn_cmp(const void *a, const void *b) * __log_wrlsn_server -- * The log wrlsn server thread. */ -static void * +static WT_THREAD_RET __log_wrlsn_server(void *arg) { WT_CONNECTION_IMPL *conn; @@ -450,14 +450,14 @@ __log_wrlsn_server(void *arg) if (0) err: __wt_err(session, ret, "log wrlsn server error"); - return (NULL); + return (WT_THREAD_RET_VALUE); } /* * __log_server -- * The log server thread. */ -static void * +static WT_THREAD_RET __log_server(void *arg) { WT_CONNECTION_IMPL *conn; @@ -502,7 +502,7 @@ err: __wt_err(session, ret, "log server error"); } if (locked) (void)__wt_writeunlock(session, log->log_archive_lock); - return (NULL); + return (WT_THREAD_RET_VALUE); } /* diff --git a/src/conn/conn_stat.c b/src/conn/conn_stat.c index 83c8d539662..0d008939d8c 100644 --- a/src/conn/conn_stat.c +++ b/src/conn/conn_stat.c @@ -380,7 +380,7 @@ err: __wt_scr_free(session, &tmp); * __statlog_server -- * The statistics server thread. */ -static void * +static WT_THREAD_RET __statlog_server(void *arg) { WT_CONNECTION_IMPL *conn; @@ -419,7 +419,7 @@ err: WT_PANIC_MSG(session, ret, "statistics log server error"); } __wt_buf_free(session, &path); __wt_buf_free(session, &tmp); - return (NULL); + return (WT_THREAD_RET_VALUE); } /* diff --git a/src/conn/conn_sweep.c b/src/conn/conn_sweep.c index 0e6b4b61c93..2a862758e08 100644 --- a/src/conn/conn_sweep.c +++ b/src/conn/conn_sweep.c @@ -132,7 +132,7 @@ __sweep(WT_SESSION_IMPL *session) * __sweep_server -- * The handle sweep server thread. */ -static void * +static WT_THREAD_RET __sweep_server(void *arg) { WT_CONNECTION_IMPL *conn; @@ -158,7 +158,7 @@ __sweep_server(void *arg) if (0) { err: WT_PANIC_MSG(session, ret, "handle sweep server error"); } - return (NULL); + return (WT_THREAD_RET_VALUE); } /* diff --git a/src/evict/evict_lru.c b/src/evict/evict_lru.c index 2ebd699c579..482bf3c9f59 100644 --- a/src/evict/evict_lru.c +++ b/src/evict/evict_lru.c @@ -10,13 +10,13 @@ static int __evict_clear_walks(WT_SESSION_IMPL *); static int __evict_has_work(WT_SESSION_IMPL *, uint32_t *); -static int __evict_lru_cmp(const void *, const void *); +static int WT_CDECL __evict_lru_cmp(const void *, const void *); static int __evict_lru_pages(WT_SESSION_IMPL *, int); static int __evict_lru_walk(WT_SESSION_IMPL *, uint32_t); static int __evict_pass(WT_SESSION_IMPL *); static int __evict_walk(WT_SESSION_IMPL *, uint32_t); static int __evict_walk_file(WT_SESSION_IMPL *, u_int *, uint32_t); -static void *__evict_worker(void *); +static WT_THREAD_RET __evict_worker(void *); static int __evict_server_work(WT_SESSION_IMPL *); /* @@ -54,7 +54,7 @@ __evict_read_gen(const WT_EVICT_ENTRY *entry) * __evict_lru_cmp -- * Qsort function: sort the eviction array. */ -static int +static int WT_CDECL __evict_lru_cmp(const void *a, const void *b) { uint64_t a_lru, b_lru; @@ -94,7 +94,7 @@ __wt_evict_list_clear_page(WT_SESSION_IMPL *session, WT_REF *ref) WT_EVICT_ENTRY *evict; uint32_t i, elem; - WT_ASSERT(session, + WT_ASSERT(session, __wt_ref_is_root(ref) || ref->state == WT_REF_LOCKED); /* Fast path: if the page isn't on the queue, don't bother searching. */ @@ -150,7 +150,7 @@ __wt_evict_server_wake(WT_SESSION_IMPL *session) * __evict_server -- * Thread to evict pages from the cache. */ -static void * +static WT_THREAD_RET __evict_server(void *arg) { WT_CACHE *cache; @@ -232,7 +232,7 @@ __evict_server(void *arg) if (0) { err: WT_PANIC_MSG(session, ret, "cache eviction server error"); } - return (NULL); + return (WT_THREAD_RET_VALUE); } /* @@ -384,7 +384,7 @@ __wt_evict_destroy(WT_SESSION_IMPL *session) * __evict_worker -- * Thread to help evict pages from the cache. */ -static void * +static WT_THREAD_RET __evict_worker(void *arg) { WT_CACHE *cache; @@ -413,7 +413,7 @@ __evict_worker(void *arg) if (0) { err: WT_PANIC_MSG(session, ret, "cache eviction worker error"); } - return (NULL); + return (WT_THREAD_RET_VALUE); } /* diff --git a/src/include/extern.h b/src/include/extern.h index fe717f47853..f8ea5eca6e9 100644 --- a/src/include/extern.h +++ b/src/include/extern.h @@ -8,7 +8,7 @@ extern int __wt_async_flush(WT_SESSION_IMPL *session); extern int __wt_async_new_op(WT_SESSION_IMPL *session, const char *uri, const char *config, const char *cfg[], WT_ASYNC_CALLBACK *cb, WT_ASYNC_OP_IMPL **opp); extern int __wt_async_op_enqueue(WT_SESSION_IMPL *session, WT_ASYNC_OP_IMPL *op); extern int __wt_async_op_init(WT_SESSION_IMPL *session); -extern void *__wt_async_worker(void *arg); +extern WT_THREAD_RET /*Quiet style.py */ __wt_async_worker(void *arg); extern int __wt_block_addr_to_buffer(WT_BLOCK *block, uint8_t **pp, wt_off_t offset, uint32_t size, uint32_t cksum); extern int __wt_block_buffer_to_addr(WT_BLOCK *block, const uint8_t *p, wt_off_t *offsetp, uint32_t *sizep, uint32_t *cksump); extern int __wt_block_addr_valid(WT_SESSION_IMPL *session, WT_BLOCK *block, const uint8_t *addr, size_t addr_size, int live); @@ -220,7 +220,7 @@ extern int __wt_cache_destroy(WT_SESSION_IMPL *session); extern int __wt_cache_pool_config(WT_SESSION_IMPL *session, const char **cfg); extern int __wt_conn_cache_pool_open(WT_SESSION_IMPL *session); extern int __wt_conn_cache_pool_destroy(WT_SESSION_IMPL *session); -extern void *__wt_cache_pool_server(void *arg); +extern WT_THREAD_RET __wt_cache_pool_server(void *arg); extern int __wt_checkpoint_server_create(WT_SESSION_IMPL *session, const char *cfg[]); extern int __wt_checkpoint_server_destroy(WT_SESSION_IMPL *session); extern int __wt_checkpoint_signal(WT_SESSION_IMPL *session, wt_off_t logsize); @@ -496,7 +496,7 @@ extern int __wt_fprintf(WT_SESSION_IMPL *session, FILE *fp, const char *fmt, ... extern int __wt_fflush(WT_SESSION_IMPL *session, FILE *fp); extern int __wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, WT_FHANDLE_MODE mode_flag); extern uint64_t __wt_strtouq(const char *nptr, char **endptr, int base); -extern int __wt_thread_create(WT_SESSION_IMPL *session, wt_thread_t *tidret, void *(*func)(void *), void *arg); +extern int __wt_thread_create(WT_SESSION_IMPL *session, wt_thread_t *tidret, WT_THREAD_CALLBACK(*func)(void *), void *arg); extern int __wt_thread_join(WT_SESSION_IMPL *session, wt_thread_t tid); extern void __wt_thread_id(char *buf, size_t buflen); extern int __wt_seconds(WT_SESSION_IMPL *session, time_t *timep); @@ -654,7 +654,7 @@ extern void __wt_stat_refresh_dsrc_stats(void *stats_arg); extern void __wt_stat_aggregate_dsrc_stats(const void *child, const void *parent); extern void __wt_stat_init_connection_stats(WT_CONNECTION_STATS *stats); extern void __wt_stat_refresh_connection_stats(void *stats_arg); -extern int __wt_txnid_cmp(const void *v1, const void *v2); +extern int WT_CDECL __wt_txnid_cmp(const void *v1, const void *v2); extern void __wt_txn_release_snapshot(WT_SESSION_IMPL *session); extern void __wt_txn_update_oldest(WT_SESSION_IMPL *session); extern void __wt_txn_refresh(WT_SESSION_IMPL *session, int get_snapshot); diff --git a/src/include/os_windows.h b/src/include/os_windows.h index a9c1cf5f65a..49cf4d2a126 100644 --- a/src/include/os_windows.h +++ b/src/include/os_windows.h @@ -14,6 +14,18 @@ typedef CONDITION_VARIABLE wt_cond_t; typedef CRITICAL_SECTION wt_mutex_t; typedef HANDLE wt_thread_t; +/* + * Thread callbacks need to match the return signature of _beginthreadex. + */ +#define WT_THREAD_CALLBACK(x) unsigned (__stdcall x) +#define WT_THREAD_RET unsigned __stdcall +#define WT_THREAD_RET_VALUE 0 + +/* + * WT declaration for calling convention type + */ +#define WT_CDECL __cdecl + #if _MSC_VER < 1900 /* Timespec is a POSIX structure not defined in Windows */ struct timespec { @@ -29,7 +41,7 @@ struct timespec { */ typedef uint32_t u_int; typedef unsigned char u_char; -typedef unsigned long u_long; +typedef uint64_t u_long; /* <= VS 2013 is not C99 compat */ #if _MSC_VER < 1900 diff --git a/src/include/posix.h b/src/include/posix.h index 14249e3ed37..1aa629c98e7 100644 --- a/src/include/posix.h +++ b/src/include/posix.h @@ -26,3 +26,15 @@ typedef pthread_cond_t wt_cond_t; typedef pthread_mutex_t wt_mutex_t; typedef pthread_t wt_thread_t; + +/* + * Thread callbacks need to match the platform specific callback types + */ +#define WT_THREAD_CALLBACK(x) void* (x) +#define WT_THREAD_RET void* +#define WT_THREAD_RET_VALUE NULL + +/* + * WT declaration for calling convention type + */ +#define WT_CDECL diff --git a/src/lsm/lsm_manager.c b/src/lsm/lsm_manager.c index 75d3e8ef6e8..12b24984fcb 100644 --- a/src/lsm/lsm_manager.c +++ b/src/lsm/lsm_manager.c @@ -11,7 +11,7 @@ static int __lsm_manager_aggressive_update(WT_SESSION_IMPL *, WT_LSM_TREE *); static int __lsm_manager_run_server(WT_SESSION_IMPL *); -static void * __lsm_worker_manager(void *); +static WT_THREAD_RET __lsm_worker_manager(void *); /* * __wt_lsm_manager_config -- @@ -500,7 +500,7 @@ err: if (dhandle_locked) { * A thread that manages all open LSM trees, and the shared LSM worker * threads. */ -static void * +static WT_THREAD_RET __lsm_worker_manager(void *arg) { WT_DECL_RET; @@ -518,7 +518,7 @@ __lsm_worker_manager(void *arg) err: WT_PANIC_MSG(session, ret, "LSM worker manager thread error"); } F_CLR(S2C(session), WT_CONN_SERVER_LSM); - return (NULL); + return (WT_THREAD_RET_VALUE); } /* diff --git a/src/lsm/lsm_worker.c b/src/lsm/lsm_worker.c index a376a81f4eb..d1272df763d 100644 --- a/src/lsm/lsm_worker.c +++ b/src/lsm/lsm_worker.c @@ -10,7 +10,7 @@ static int __lsm_worker_general_op( WT_SESSION_IMPL *, WT_LSM_WORKER_ARGS *, int *); -static void * __lsm_worker(void *); +static WT_THREAD_RET __lsm_worker(void *); /* * __wt_lsm_worker_start -- @@ -82,7 +82,7 @@ err: __wt_lsm_manager_free_work_unit(session, entry); * __lsm_worker -- * A thread that executes work units for all open LSM trees. */ -static void * +static WT_THREAD_RET __lsm_worker(void *arg) { WT_CONNECTION_IMPL *conn; @@ -166,5 +166,5 @@ err: __wt_lsm_manager_free_work_unit(session, entry); WT_PANIC_MSG(session, ret, "Error in LSM worker thread %d", cookie->id); } - return (NULL); + return (WT_THREAD_RET_VALUE); } diff --git a/src/meta/meta_ckpt.c b/src/meta/meta_ckpt.c index 0a8557c7a33..70c9bf8dfcd 100644 --- a/src/meta/meta_ckpt.c +++ b/src/meta/meta_ckpt.c @@ -230,7 +230,7 @@ err: __wt_free(session, namep); * __ckpt_compare_order -- * Qsort comparison routine for the checkpoint list. */ -static int +static int WT_CDECL __ckpt_compare_order(const void *a, const void *b) { WT_CKPT *ackpt, *bckpt; diff --git a/src/os_posix/os_thread.c b/src/os_posix/os_thread.c index 392f997f1ac..c70a04c8df7 100644 --- a/src/os_posix/os_thread.c +++ b/src/os_posix/os_thread.c @@ -14,7 +14,7 @@ */ int __wt_thread_create(WT_SESSION_IMPL *session, - wt_thread_t *tidret, void *(*func)(void *), void *arg) + wt_thread_t *tidret, WT_THREAD_CALLBACK(*func)(void *), void *arg) { WT_DECL_RET; diff --git a/src/os_win/os_fallocate.c b/src/os_win/os_fallocate.c index 9d0a86882c6..f01ef0e101a 100644 --- a/src/os_win/os_fallocate.c +++ b/src/os_win/os_fallocate.c @@ -15,6 +15,8 @@ void __wt_fallocate_config(WT_SESSION_IMPL *session, WT_FH *fh) { + WT_UNUSED(session); + fh->fallocate_available = WT_FALLOCATE_AVAILABLE; /* diff --git a/src/os_win/os_mtx_cond.c b/src/os_win/os_mtx_cond.c index a09b744720f..51f6d6533c8 100644 --- a/src/os_win/os_mtx_cond.c +++ b/src/os_win/os_mtx_cond.c @@ -46,7 +46,7 @@ __wt_cond_wait(WT_SESSION_IMPL *session, WT_CONDVAR *cond, uint64_t usecs) DWORD milliseconds; WT_DECL_RET; uint64_t milliseconds64; - int lasterror, locked; + int locked; locked = 0; @@ -76,7 +76,7 @@ __wt_cond_wait(WT_SESSION_IMPL *session, WT_CONDVAR *cond, uint64_t usecs) */ if (milliseconds64 >= INFINITE) milliseconds64 = INFINITE - 1; - milliseconds = milliseconds64; + milliseconds = (DWORD)milliseconds64; /* * 0 would mean the CV sleep becomes a TryCV which we do not diff --git a/src/os_win/os_once.c b/src/os_win/os_once.c index 179c1bc97f7..bec8c08777c 100644 --- a/src/os_win/os_once.c +++ b/src/os_win/os_once.c @@ -19,6 +19,8 @@ BOOL CALLBACK _wt_init_once_callback( ) { void(*init_routine)(void) = Parameter; + WT_UNUSED(InitOnce); + WT_UNUSED(Context); init_routine(); diff --git a/src/os_win/os_thread.c b/src/os_win/os_thread.c index 05f7dc15914..b5f13aea4e9 100644 --- a/src/os_win/os_thread.c +++ b/src/os_win/os_thread.c @@ -14,14 +14,14 @@ */ int __wt_thread_create(WT_SESSION_IMPL *session, - wt_thread_t *tidret, void *(*func)(void *), void *arg) + wt_thread_t *tidret, WT_THREAD_CALLBACK(*func)(void *), void *arg) { /* Spawn a new thread of control. */ - *tidret = CreateThread(NULL, 0, func, arg, 0, NULL); - if (*tidret != NULL) + *tidret = (HANDLE)_beginthreadex(NULL, 0, func, arg, 0, NULL); + if (*tidret != 0) return (0); - WT_RET_MSG(session, __wt_errno(), "CreateThread"); + WT_RET_MSG(session, errno, "_beginthreadex"); } /* diff --git a/src/os_win/os_time.c b/src/os_win/os_time.c index 30fde045c54..c51db118ce1 100644 --- a/src/os_win/os_time.c +++ b/src/os_win/os_time.c @@ -32,8 +32,10 @@ int __wt_epoch(WT_SESSION_IMPL *session, struct timespec *tsp) { uint64_t ns100; - FILETIME time; + + WT_UNUSED(session); + GetSystemTimeAsFileTime(&time); ns100 = (((int64_t)time.dwHighDateTime << 32) + time.dwLowDateTime) diff --git a/src/support/huffman.c b/src/support/huffman.c index 12f98184b5c..48361551ba1 100644 --- a/src/support/huffman.c +++ b/src/support/huffman.c @@ -96,8 +96,8 @@ typedef struct __indexed_byte { uint32_t frequency; } INDEXED_SYMBOL; -static int indexed_freq_compare(const void *, const void *); -static int indexed_symbol_compare(const void *, const void *); +static int WT_CDECL indexed_freq_compare(const void *, const void *); +static int WT_CDECL indexed_symbol_compare(const void *, const void *); static void make_table( WT_SESSION_IMPL *, uint8_t *, uint16_t, WT_HUFFMAN_CODE *, u_int); static void node_queue_close(WT_SESSION_IMPL *, NODE_QUEUE *); @@ -117,7 +117,7 @@ static void set_codes(WT_FREQTREE_NODE *, WT_HUFFMAN_CODE *, uint16_t, uint8_t); * indexed_symbol_compare -- * Qsort comparator to order the table by symbol, lowest to highest. */ -static int +static int WT_CDECL indexed_symbol_compare(const void *a, const void *b) { return (((INDEXED_SYMBOL *)a)->symbol > @@ -131,7 +131,7 @@ indexed_symbol_compare(const void *a, const void *b) * Qsort comparator to order the table by frequency (the most frequent * symbols will be at the end of the array). */ -static int +static int WT_CDECL indexed_freq_compare(const void *a, const void *b) { return (((INDEXED_SYMBOL *)a)->frequency > diff --git a/src/txn/txn.c b/src/txn/txn.c index 6c06a0af820..a1bec569ce7 100644 --- a/src/txn/txn.c +++ b/src/txn/txn.c @@ -12,7 +12,7 @@ * __wt_txnid_cmp -- * Compare transaction IDs for sorting / searching. */ -int +int WT_CDECL __wt_txnid_cmp(const void *v1, const void *v2) { uint64_t id1, id2; diff --git a/test/mciproject.yml b/test/mciproject.yml index d7f66212b2a..64007bdbd92 100644 --- a/test/mciproject.yml +++ b/test/mciproject.yml @@ -57,6 +57,21 @@ tasks: ${test_env_vars|} python ./test/suite/run.py -v 2 + - name: compile-windows-alt + commands: + - func: "fetch source" + - command: git.apply_patch + params: + directory: wiredtiger + - command: shell.exec + params: + working_dir: "wiredtiger" + script: | + set -o errexit + set -o verbose + + scons.bat ${smp_command|} "CFLAGS=/Gv /wd4090 /wd4996 /we4047 /we4024 /TC /we4100" wiredtiger.dll libwiredtiger.lib + buildvariants: - name: ubuntu1404 display_name: Ubuntu 14.04 @@ -89,6 +104,7 @@ buildvariants: smp_command: -j$(grep -c ^processor /proc/cpuinfo) tasks: - name: compile-windows + - name: compile-windows-alt - name: osx-108 display_name: OS X 10.8 diff --git a/test/windows/windows_shim.c b/test/windows/windows_shim.c index 646ebf0c441..8b0f05bfe2d 100644 --- a/test/windows/windows_shim.c +++ b/test/windows/windows_shim.c @@ -59,6 +59,7 @@ usleep(useconds_t useconds) int pthread_rwlock_destroy(pthread_rwlock_t *lock) { + lock = lock; return (0); } @@ -66,6 +67,7 @@ int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *ignored) { + ignored = ignored; InitializeSRWLock(&rwlock->rwlock); rwlock->exclusive_locked = 0; @@ -99,13 +101,15 @@ pthread_rwlock_wrlock(pthread_rwlock_t *rwlock) rwlock->exclusive_locked = GetCurrentThreadId(); return (0); - } +#pragma warning( once : 4024 ) +#pragma warning( once : 4047 ) int pthread_create(pthread_t *tidret, const pthread_attr_t *ignored, void *(*func)(void *), void * arg) { + ignored = ignored; *tidret = CreateThread(NULL, 0, func, arg, 0, NULL); if (*tidret != NULL) @@ -117,6 +121,7 @@ pthread_create(pthread_t *tidret, const pthread_attr_t *ignored, int pthread_join(pthread_t thread, void **ignored) { + ignored = ignored; WaitForSingleObject(thread, INFINITE); return (0); } |