diff --git a/packet.c b/packet.c
index 583e7802..109d254d 100644
--- a/packet.c
+++ b/packet.c
@@ -16,14 +16,12 @@
* along with this program. If not, see .
*/
+#include
#include "tvhead.h"
#include "packet.h"
#include "string.h"
-static pthread_mutex_t refmutex = PTHREAD_MUTEX_INITIALIZER;
-
-
/*
*
*/
@@ -64,15 +62,8 @@ pkt_alloc(void *data, size_t datalen, int64_t pts, int64_t dts)
void
pkt_ref_dec(th_pkt_t *pkt)
{
- if(pkt->pkt_refcount == 1) {
+ if((atomic_add(&pkt->pkt_refcount, -1)) == 1)
pkt_destroy(pkt);
- return;
- }
-
- /* Use atomic decrease */
- pthread_mutex_lock(&refmutex);
- pkt->pkt_refcount--;
- pthread_mutex_unlock(&refmutex);
}
@@ -82,10 +73,7 @@ pkt_ref_dec(th_pkt_t *pkt)
void
pkt_ref_inc(th_pkt_t *pkt)
{
- /* Use atomic increase */
- pthread_mutex_lock(&refmutex);
- pkt->pkt_refcount++;
- pthread_mutex_unlock(&refmutex);
+ atomic_add(&pkt->pkt_refcount, 1);
}
/**
@@ -94,9 +82,7 @@ pkt_ref_inc(th_pkt_t *pkt)
void
pkt_ref_inc_poly(th_pkt_t *pkt, int n)
{
- pthread_mutex_lock(&refmutex);
- pkt->pkt_refcount += n;
- pthread_mutex_unlock(&refmutex);
+ atomic_add(&pkt->pkt_refcount, n);
}