summaryrefslogtreecommitdiff
path: root/pjlib/src/pj
diff options
context:
space:
mode:
Diffstat (limited to 'pjlib/src/pj')
-rw-r--r--pjlib/src/pj/os_core_linux_kernel.c17
-rw-r--r--pjlib/src/pj/os_core_unix.c41
-rw-r--r--pjlib/src/pj/os_core_win32.c26
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()