diff --git a/src/dcurl.c b/src/dcurl.c index 645989d..aca0dab 100644 --- a/src/dcurl.c +++ b/src/dcurl.c @@ -17,6 +17,7 @@ #endif #include "implcontext.h" #include "trinary.h" +#include "uv.h" #if defined(ENABLE_AVX) #include "pow_avx.h" #elif defined(ENABLE_SSE) @@ -25,20 +26,9 @@ #include "pow_c.h" #endif -#ifdef __APPLE__ -#include -#else -#include -#endif - /* check whether dcurl is initialized */ static bool isInitialized = false; - -#ifdef __APPLE__ -static dispatch_semaphore_t notify; -#else -static sem_t notify; -#endif +static uv_sem_t notify; LIST_HEAD(IMPL_LIST); @@ -78,11 +68,7 @@ bool dcurl_init() ret &= registerImplContext(&PoWFPGAAccel_Context); #endif -#ifdef __APPLE__ - notify = dispatch_semaphore_create(0); -#else - sem_init(¬ify, 0, 0); -#endif + uv_sem_init(¬ify, 0); return isInitialized = ret; } @@ -118,11 +104,7 @@ int8_t *dcurl_entry(int8_t *trytes, int mwm, int threads) goto do_pow; } } -#ifdef __APPLE__ - dispatch_semaphore_wait(notify, DISPATCH_TIME_FOREVER); -#else - sem_wait(¬ify); -#endif + uv_sem_wait(¬ify); } while (1); do_pow: @@ -133,10 +115,6 @@ int8_t *dcurl_entry(int8_t *trytes, int mwm, int threads) } freePoWContext(impl, pow_ctx); exitImplContext(impl); -#ifdef __APPLE__ - dispatch_semaphore_signal(notify); -#else - sem_post(¬ify); -#endif + uv_sem_post(¬ify); return res; } diff --git a/src/implcontext.c b/src/implcontext.c index b35ed15..d09dbc3 100644 --- a/src/implcontext.c +++ b/src/implcontext.c @@ -30,21 +30,21 @@ void destroyImplContext(ImplContext *impl_ctx) bool enterImplContext(ImplContext *impl_ctx) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); if (impl_ctx->num_working_thread >= impl_ctx->num_max_thread) { - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return false; /* Access Failed */ } impl_ctx->num_working_thread++; - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return true; /* Access Success */ } void exitImplContext(ImplContext *impl_ctx) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); impl_ctx->num_working_thread--; - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); } void *getPoWContext(ImplContext *impl_ctx, int8_t *trytes, int mwm, int threads) diff --git a/src/implcontext.h b/src/implcontext.h index dfc5dd7..9a406ce 100644 --- a/src/implcontext.h +++ b/src/implcontext.h @@ -1,11 +1,11 @@ #ifndef IMPL_CTX_H_ #define IMPL_CTX_H_ -#include #include #include #include "common.h" #include "list.h" +#include "uv.h" typedef struct _impl_context ImplContext; @@ -14,7 +14,7 @@ struct _impl_context { char *description; /* Multi-thread Management */ - pthread_mutex_t lock; + uv_mutex_t lock; int bitmap; /* Used to tell which slot is available */ int num_max_thread; int num_working_thread; diff --git a/src/pow_avx.c b/src/pow_avx.c index 1e789e4..25a67f8 100644 --- a/src/pow_avx.c +++ b/src/pow_avx.c @@ -6,11 +6,9 @@ */ #include "pow_avx.h" -#include #include #include #include -#include #include "cpu-utils.h" #include "curl.h" #include "implcontext.h" @@ -610,7 +608,7 @@ static bool PoWAVX_Context_Initialize(ImplContext *impl_ctx) uv_loop_init(&ctx[i].loop); } impl_ctx->context = ctx; - pthread_mutex_init(&impl_ctx->lock, NULL); + uv_mutex_init(&impl_ctx->lock); return true; fail: @@ -643,11 +641,11 @@ static void *PoWAVX_getPoWContext(ImplContext *impl_ctx, int mwm, int threads) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); for (int i = 0; i < impl_ctx->num_max_thread; i++) { if (impl_ctx->bitmap & (0x1 << i)) { impl_ctx->bitmap &= ~(0x1 << i); - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); PoW_AVX_Context *ctx = impl_ctx->context + sizeof(PoW_AVX_Context) * i; memcpy(ctx->input_trytes, trytes, TRANSACTION_TRYTES_LENGTH); @@ -660,15 +658,15 @@ static void *PoWAVX_getPoWContext(ImplContext *impl_ctx, return ctx; } } - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return NULL; /* It should not happen */ } static bool PoWAVX_freePoWContext(ImplContext *impl_ctx, void *pow_ctx) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); impl_ctx->bitmap |= 0x1 << ((PoW_AVX_Context *) pow_ctx)->indexOfContext; - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return true; } diff --git a/src/pow_avx.h b/src/pow_avx.h index 6103e51..7818abc 100644 --- a/src/pow_avx.h +++ b/src/pow_avx.h @@ -1,13 +1,12 @@ #ifndef POW_AVX_H_ #define POW_AVX_H_ -#include #include #include -#include #include "common.h" #include "constants.h" #include "trinary.h" +#include "uv.h" typedef struct _pwork_struct Pwork_struct; diff --git a/src/pow_c.c b/src/pow_c.c index 10f6cd9..5c44e26 100644 --- a/src/pow_c.c +++ b/src/pow_c.c @@ -6,11 +6,9 @@ */ #include "pow_c.h" -#include #include #include #include -#include #include "cpu-utils.h" #include "curl.h" #include "implcontext.h" @@ -374,7 +372,7 @@ static bool PoWC_Context_Initialize(ImplContext *impl_ctx) uv_loop_init(&ctx[i].loop); } impl_ctx->context = ctx; - pthread_mutex_init(&impl_ctx->lock, NULL); + uv_mutex_init(&impl_ctx->lock); return true; fail: @@ -407,11 +405,11 @@ static void *PoWC_getPoWContext(ImplContext *impl_ctx, int mwm, int threads) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); for (int i = 0; i < impl_ctx->num_max_thread; i++) { if (impl_ctx->bitmap & (0x1 << i)) { impl_ctx->bitmap &= ~(0x1 << i); - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); PoW_C_Context *ctx = impl_ctx->context + sizeof(PoW_C_Context) * i; memcpy(ctx->input_trytes, trytes, TRANSACTION_TRYTES_LENGTH); ctx->mwm = mwm; @@ -423,15 +421,15 @@ static void *PoWC_getPoWContext(ImplContext *impl_ctx, return ctx; } } - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return NULL; /* It should not happen */ } static bool PoWC_freePoWContext(ImplContext *impl_ctx, void *pow_ctx) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); impl_ctx->bitmap |= 0x1 << ((PoW_C_Context *) pow_ctx)->indexOfContext; - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return true; } diff --git a/src/pow_c.h b/src/pow_c.h index 842c290..546a6db 100644 --- a/src/pow_c.h +++ b/src/pow_c.h @@ -1,13 +1,12 @@ #ifndef POW_C_H_ #define POW_C_H_ -#include #include #include -#include #include "common.h" #include "constants.h" #include "trinary.h" +#include "uv.h" typedef struct _pwork_struct Pwork_struct; diff --git a/src/pow_cl.c b/src/pow_cl.c index 838ddc0..429d94a 100644 --- a/src/pow_cl.c +++ b/src/pow_cl.c @@ -271,7 +271,7 @@ static bool PoWCL_Context_Initialize(ImplContext *impl_ctx) impl_ctx->bitmap = impl_ctx->bitmap << 1 | 0x1; } impl_ctx->context = ctx; - pthread_mutex_init(&impl_ctx->lock, NULL); + uv_mutex_init(&impl_ctx->lock); return true; fail: @@ -290,11 +290,11 @@ static void *PoWCL_getPoWContext(ImplContext *impl_ctx, int mwm, int threads) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); for (int i = 0; i < impl_ctx->num_max_thread; i++) { if (impl_ctx->bitmap & (0x1 << i)) { impl_ctx->bitmap &= ~(0x1 << i); - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); PoW_CL_Context *ctx = impl_ctx->context + sizeof(PoW_CL_Context) * i; memcpy(ctx->input_trytes, trytes, TRANSACTION_TRYTES_LENGTH); @@ -303,15 +303,15 @@ static void *PoWCL_getPoWContext(ImplContext *impl_ctx, return ctx; } } - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return NULL; /* It should not happen */ } static bool PoWCL_freePoWContext(ImplContext *impl_ctx, void *pow_ctx) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); impl_ctx->bitmap |= 0x1 << ((PoW_CL_Context *) pow_ctx)->indexOfContext; - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return true; } diff --git a/src/pow_fpga_accel.c b/src/pow_fpga_accel.c index 0054dd7..eb4a644 100644 --- a/src/pow_fpga_accel.c +++ b/src/pow_fpga_accel.c @@ -163,7 +163,6 @@ static bool PoWFPGAAccel_Context_Initialize(ImplContext *impl_ctx) ctx->cpow_map = (uint32_t *) (ctx->fpga_regs_map + CPOW_BASE); impl_ctx->context = ctx; - pthread_mutex_init(&impl_ctx->lock, NULL); return true; diff --git a/src/pow_sse.c b/src/pow_sse.c index e0131c6..b2e77e7 100644 --- a/src/pow_sse.c +++ b/src/pow_sse.c @@ -7,11 +7,9 @@ #include "pow_sse.h" #include -#include #include #include #include -#include #include "cpu-utils.h" #include "curl.h" #include "implcontext.h" @@ -392,7 +390,7 @@ static bool PoWSSE_Context_Initialize(ImplContext *impl_ctx) uv_loop_init(&ctx[i].loop); } impl_ctx->context = ctx; - pthread_mutex_init(&impl_ctx->lock, NULL); + uv_mutex_init(&impl_ctx->lock); return true; fail: @@ -425,11 +423,11 @@ static void *PoWSSE_getPoWContext(ImplContext *impl_ctx, int mwm, int threads) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); for (int i = 0; i < impl_ctx->num_max_thread; i++) { if (impl_ctx->bitmap & (0x1 << i)) { impl_ctx->bitmap &= ~(0x1 << i); - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); PoW_SSE_Context *ctx = impl_ctx->context + sizeof(PoW_SSE_Context) * i; memcpy(ctx->input_trytes, trytes, TRANSACTION_TRYTES_LENGTH); @@ -442,15 +440,15 @@ static void *PoWSSE_getPoWContext(ImplContext *impl_ctx, return ctx; } } - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return NULL; /* It should not happen */ } static bool PoWSSE_freePoWContext(ImplContext *impl_ctx, void *pow_ctx) { - pthread_mutex_lock(&impl_ctx->lock); + uv_mutex_lock(&impl_ctx->lock); impl_ctx->bitmap |= 0x1 << ((PoW_SSE_Context *) pow_ctx)->indexOfContext; - pthread_mutex_unlock(&impl_ctx->lock); + uv_mutex_unlock(&impl_ctx->lock); return true; } diff --git a/src/pow_sse.h b/src/pow_sse.h index 160e12c..73e5af7 100644 --- a/src/pow_sse.h +++ b/src/pow_sse.h @@ -1,13 +1,12 @@ #ifndef POW_SSE_H_ #define POW_SSE_H_ -#include #include #include -#include #include "common.h" #include "constants.h" #include "trinary.h" +#include "uv.h" typedef struct _pwork_struct Pwork_struct;