diff options
Diffstat (limited to 'pjlib/src/pj')
-rw-r--r-- | pjlib/src/pj/os_core_linux_kernel.c | 17 | ||||
-rw-r--r-- | pjlib/src/pj/os_core_unix.c | 41 | ||||
-rw-r--r-- | pjlib/src/pj/os_core_win32.c | 26 |
3 files changed, 45 insertions, 39 deletions
diff --git a/pjlib/src/pj/os_core_linux_kernel.c b/pjlib/src/pj/os_core_linux_kernel.c index 01d06ab2..14337087 100644 --- a/pjlib/src/pj/os_core_linux_kernel.c +++ b/pjlib/src/pj/os_core_linux_kernel.c @@ -415,15 +415,12 @@ PJ_DEF(pj_status_t) pj_atomic_create( pj_pool_t *pool, PJ_DEF(pj_status_t) pj_atomic_destroy( pj_atomic_t *var ) { - return 0; + return PJ_SUCCESS; } -PJ_DEF(pj_atomic_value_t) pj_atomic_set(pj_atomic_t *var, - pj_atomic_value_t value) +PJ_DEF(void) pj_atomic_set(pj_atomic_t *var, pj_atomic_value_t value) { - pj_atomic_value_t oldval = atomic_read(&var->atom); atomic_set(&var->atom, value); - return oldval; } PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *var) @@ -431,18 +428,20 @@ PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *var) return atomic_read(&var->atom); } -PJ_DEF(pj_atomic_value_t) pj_atomic_inc(pj_atomic_t *var) +PJ_DEF(void) pj_atomic_inc(pj_atomic_t *var) { atomic_inc(&var->atom); - return atomic_read(&var->atom); } -PJ_DEF(pj_atomic_value_t) pj_atomic_dec(pj_atomic_t *var) +PJ_DEF(void) pj_atomic_dec(pj_atomic_t *var) { atomic_dec(&var->atom); - return atomic_read(&var->atom); } +PJ_DEF(void) pj_atomic_add( pj_atomic_t *var, pj_atomic_value_t value ) +{ + atomic_add(value, &var->atom); +} /////////////////////////////////////////////////////////////////////////////// diff --git a/pjlib/src/pj/os_core_unix.c b/pjlib/src/pj/os_core_unix.c index 4b0de399..18f4ded2 100644 --- a/pjlib/src/pj/os_core_unix.c +++ b/pjlib/src/pj/os_core_unix.c @@ -526,23 +526,17 @@ PJ_DEF(pj_status_t) pj_atomic_destroy( pj_atomic_t *atomic_var ) /* * pj_atomic_set() */ -PJ_DEF(pj_atomic_value_t) pj_atomic_set(pj_atomic_t *atomic_var, - pj_atomic_value_t value) +PJ_DEF(void) pj_atomic_set(pj_atomic_t *atomic_var, pj_atomic_value_t value) { - pj_atomic_value_t oldval; - PJ_CHECK_STACK(); - PJ_ASSERT_RETURN(atomic_var, 0); #if PJ_HAS_THREADS pj_mutex_lock( atomic_var->mutex ); #endif - oldval = atomic_var->value; atomic_var->value = value; #if PJ_HAS_THREADS pj_mutex_unlock( atomic_var->mutex); #endif - return oldval; } /* @@ -553,7 +547,6 @@ PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *atomic_var) pj_atomic_value_t oldval; PJ_CHECK_STACK(); - PJ_ASSERT_RETURN(atomic_var, 0); #if PJ_HAS_THREADS pj_mutex_lock( atomic_var->mutex ); @@ -568,41 +561,49 @@ PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *atomic_var) /* * pj_atomic_inc() */ -PJ_DEF(pj_atomic_value_t) pj_atomic_inc(pj_atomic_t *atomic_var) +PJ_DEF(void) pj_atomic_inc(pj_atomic_t *atomic_var) { - pj_atomic_value_t newval; - PJ_CHECK_STACK(); - PJ_ASSERT_RETURN(atomic_var, 0); #if PJ_HAS_THREADS pj_mutex_lock( atomic_var->mutex ); #endif - newval = ++atomic_var->value; + ++atomic_var->value; #if PJ_HAS_THREADS pj_mutex_unlock( atomic_var->mutex); #endif - return newval; } /* * pj_atomic_dec() */ -PJ_DEF(pj_atomic_value_t) pj_atomic_dec(pj_atomic_t *atomic_var) +PJ_DEF(void) pj_atomic_dec(pj_atomic_t *atomic_var) { - pj_atomic_value_t newval; - PJ_CHECK_STACK(); - PJ_ASSERT_RETURN(atomic_var, 0); #if PJ_HAS_THREADS pj_mutex_lock( atomic_var->mutex ); #endif - newval = --atomic_var->value; + --atomic_var->value; #if PJ_HAS_THREADS pj_mutex_unlock( atomic_var->mutex); #endif - return newval; +} + +/* + * pj_atomic_add() + */ +PJ_DEF(void) pj_atomic_add( pj_atomic_t *atomic_var, pj_atomic_value_t value ) +{ +#if PJ_HAS_THREADS + pj_mutex_lock(atomic_var->mutex); +#endif + + atomic_var->value += value; + +#if PJ_HAS_THREADS + pj_mutex_unlock(atomic_var->mutex); +#endif } diff --git a/pjlib/src/pj/os_core_win32.c b/pjlib/src/pj/os_core_win32.c index ad69799d..6ba87493 100644 --- a/pjlib/src/pj/os_core_win32.c +++ b/pjlib/src/pj/os_core_win32.c @@ -495,18 +495,17 @@ PJ_DEF(pj_status_t) pj_atomic_destroy( pj_atomic_t *var ) /* * pj_atomic_set() */ -PJ_DEF(long) pj_atomic_set(pj_atomic_t *atomic_var, long value) +PJ_DEF(void) pj_atomic_set( pj_atomic_t *atomic_var, pj_atomic_value_t value) { PJ_CHECK_STACK(); - PJ_ASSERT_RETURN(atomic_var, 0); - return InterlockedExchange(&atomic_var->value, value); + InterlockedExchange(&atomic_var->value, value); } /* * pj_atomic_get() */ -PJ_DEF(long) pj_atomic_get(pj_atomic_t *atomic_var) +PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *atomic_var) { PJ_CHECK_STACK(); PJ_ASSERT_RETURN(atomic_var, 0); @@ -517,13 +516,12 @@ PJ_DEF(long) pj_atomic_get(pj_atomic_t *atomic_var) /* * pj_atomic_inc() */ -PJ_DEF(long) pj_atomic_inc(pj_atomic_t *atomic_var) +PJ_DEF(void) pj_atomic_inc(pj_atomic_t *atomic_var) { PJ_CHECK_STACK(); - PJ_ASSERT_RETURN(atomic_var, 0); #if defined(PJ_WIN32_WINNT) && PJ_WIN32_WINNT >= 0x0400 - return InterlockedIncrement(&atomic_var->value); + InterlockedIncrement(&atomic_var->value); #else # error Fix Me #endif @@ -532,19 +530,27 @@ PJ_DEF(long) pj_atomic_inc(pj_atomic_t *atomic_var) /* * pj_atomic_dec() */ -PJ_DEF(long) pj_atomic_dec(pj_atomic_t *atomic_var) +PJ_DEF(void) pj_atomic_dec(pj_atomic_t *atomic_var) { PJ_CHECK_STACK(); - PJ_ASSERT_RETURN(atomic_var, 0); #if defined(PJ_WIN32_WINNT) && PJ_WIN32_WINNT >= 0x0400 - return InterlockedDecrement(&atomic_var->value); + InterlockedDecrement(&atomic_var->value); #else # error Fix me #endif } +/* + * pj_atomic_add() + */ +PJ_DEF(void) pj_atomic_add( pj_atomic_t *atomic_var, + pj_atomic_value_t value ) +{ + InterlockedExchangeAdd( &atomic_var->value, value ); +} + /////////////////////////////////////////////////////////////////////////////// /* * pj_thread_local_alloc() |