aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/ref.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-12-25 21:57:50 +0000
committerrsc <devnull@localhost>2004-12-25 21:57:50 +0000
commit619085f0b4a85104ef6c7496f9ce1f46e9b17c82 (patch)
tree9959c15a14c44e8c8fe38f78bbcbbb576d23b2aa /src/libthread/ref.c
parent1544f90960275dc9211bde30329c3258e0e1bf38 (diff)
downloadplan9port-619085f0b4a85104ef6c7496f9ce1f46e9b17c82.tar.gz
plan9port-619085f0b4a85104ef6c7496f9ce1f46e9b17c82.tar.bz2
plan9port-619085f0b4a85104ef6c7496f9ce1f46e9b17c82.zip
more new libthread
Diffstat (limited to 'src/libthread/ref.c')
-rw-r--r--src/libthread/ref.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libthread/ref.c b/src/libthread/ref.c
new file mode 100644
index 00000000..30c932ed
--- /dev/null
+++ b/src/libthread/ref.c
@@ -0,0 +1,27 @@
+#include "u.h"
+#include "libc.h"
+#include "thread.h"
+
+static long
+refadd(Ref *r, long a)
+{
+ long ref;
+
+ lock(&r->lock);
+ r->ref += a;
+ ref = r->ref;
+ unlock(&r->lock);
+ return ref;
+}
+
+long
+incref(Ref *r)
+{
+ return refadd(r, 1);
+}
+
+long
+decref(Ref *r)
+{
+ return refadd(r, -1);
+}