summaryrefslogtreecommitdiff
path: root/debian/patches/0005-include-add-lock-less-reference-counting-primitives.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/0005-include-add-lock-less-reference-counting-primitives.patch')
-rw-r--r--debian/patches/0005-include-add-lock-less-reference-counting-primitives.patch213
1 files changed, 0 insertions, 213 deletions
diff --git a/debian/patches/0005-include-add-lock-less-reference-counting-primitives.patch b/debian/patches/0005-include-add-lock-less-reference-counting-primitives.patch
deleted file mode 100644
index 4a4dd9dc..00000000
--- a/debian/patches/0005-include-add-lock-less-reference-counting-primitives.patch
+++ /dev/null
@@ -1,213 +0,0 @@
-From f6ed9ea2b93816dff52e33b71d69ed6787a57841 Mon Sep 17 00:00:00 2001
-From: Justus Winter <4winter@informatik.uni-hamburg.de>
-Date: Tue, 6 May 2014 19:52:04 +0200
-Subject: [PATCH 05/15] include: add lock-less reference counting primitives
-
-* include/refcount.h: New file.
----
- include/refcount.h | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 193 insertions(+)
- create mode 100644 include/refcount.h
-
-diff --git a/include/refcount.h b/include/refcount.h
-new file mode 100644
-index 0000000..0816220
---- /dev/null
-+++ b/include/refcount.h
-@@ -0,0 +1,193 @@
-+/* Lock-less reference counting primitives
-+
-+ Copyright (C) 2014 Free Software Foundation, Inc.
-+
-+ Written by Justus Winter <4winter@informatik.uni-hamburg.de>
-+
-+ This file is part of the GNU Hurd.
-+
-+ The GNU Hurd is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU General Public License as
-+ published by the Free Software Foundation; either version 2, or (at
-+ your option) any later version.
-+
-+ The GNU Hurd is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with the GNU Hurd. If not, see <http://www.gnu.org/licenses/>. */
-+
-+#ifndef _HURD_REFCOUNT_H_
-+#define _HURD_REFCOUNT_H_
-+
-+#include <assert.h>
-+#include <stdint.h>
-+
-+/* Simple reference counting. */
-+
-+/* An opaque type. You must not access these values directly. */
-+typedef unsigned int refcount_t;
-+
-+/* Initialize REF with REFERENCES. */
-+static inline void
-+refcount_init (refcount_t *ref, unsigned int references)
-+{
-+ *ref = references;
-+}
-+
-+/* Increment REF. Return the result of the operation. This function
-+ uses atomic operations. It is not required to serialize calls to
-+ this function. */
-+static inline unsigned int
-+refcount_ref (refcount_t *ref)
-+{
-+ unsigned int r;
-+ r = __atomic_add_fetch (ref, 1, __ATOMIC_RELAXED);
-+ assert (r != UINT_MAX);
-+ return r;
-+}
-+
-+/* Decrement REF. Return the result of the operation. This function
-+ uses atomic operations. It is not required to serialize calls to
-+ this function. */
-+static inline unsigned int
-+refcount_deref (refcount_t *ref)
-+{
-+ unsigned int r;
-+ r = __atomic_sub_fetch (ref, 1, __ATOMIC_RELAXED);
-+ assert (r != UINT_MAX);
-+ return r;
-+}
-+
-+/* Return REF. This function uses atomic operations. It is not
-+ required to serialize calls to this function. */
-+static inline unsigned int
-+refcount_references (refcount_t *ref)
-+{
-+ return __atomic_load_n (ref, __ATOMIC_RELAXED);
-+}
-+
-+/* Reference counting with weak references. */
-+
-+/* An opaque type. You must not access these values directly. */
-+typedef union _references refcounts_t;
-+
-+/* Instead, the functions manipulating refcounts_t values write the
-+ results into this kind of objects. */
-+struct references {
-+ uint32_t hard;
-+ uint32_t weak;
-+};
-+
-+/* We use a union to convert struct reference values to uint64_t which
-+ we can manipulate atomically. While this behavior is not
-+ guaranteed by the C standard, it is supported by all major
-+ compilers. */
-+union _references {
-+ struct references references;
-+ uint64_t value;
-+};
-+
-+/* Initialize REF with HARD and WEAK references. */
-+static inline void
-+refcounts_init (refcounts_t *ref, uint32_t hard, uint32_t weak)
-+{
-+ ref->references = (struct references) { .hard = hard, .weak = weak };
-+}
-+
-+/* Increment the hard reference count of REF. If RESULT is not NULL,
-+ the result of the operation is written there. This function uses
-+ atomic operations. It is not required to serialize calls to this
-+ function. */
-+static inline void
-+refcounts_ref (refcounts_t *ref, struct references *result)
-+{
-+ const union _references op = { .references = { .hard = 1 } };
-+ union _references r;
-+ r.value = __atomic_add_fetch (&ref->value, op.value, __ATOMIC_RELAXED);
-+ assert (r.references.hard != UINT32_MAX);
-+ if (result)
-+ *result = r.references;
-+}
-+
-+/* Decrement the hard reference count of REF. If RESULT is not NULL,
-+ the result of the operation is written there. This function uses
-+ atomic operations. It is not required to serialize calls to this
-+ function. */
-+static inline void
-+refcounts_deref (refcounts_t *ref, struct references *result)
-+{
-+ const union _references op = { .references = { .hard = 1 } };
-+ union _references r;
-+ r.value = __atomic_sub_fetch (&ref->value, op.value, __ATOMIC_RELAXED);
-+ assert (r.references.hard != UINT32_MAX);
-+ if (result)
-+ *result = r.references;
-+}
-+
-+/* Increment the weak reference count of REF. If RESULT is not NULL,
-+ the result of the operation is written there. This function uses
-+ atomic operations. It is not required to serialize calls to this
-+ function. */
-+static inline void
-+refcounts_ref_weak (refcounts_t *ref, struct references *result)
-+{
-+ const union _references op = { .references = { .weak = 1 } };
-+ union _references r;
-+ r.value = __atomic_add_fetch (&ref->value, op.value, __ATOMIC_RELAXED);
-+ assert (r.references.weak != UINT32_MAX);
-+ if (result)
-+ *result = r.references;
-+}
-+
-+/* Decrement the weak reference count of REF. If RESULT is not NULL,
-+ the result of the operation is written there. This function uses
-+ atomic operations. It is not required to serialize calls to this
-+ function. */
-+static inline void
-+refcounts_deref_weak (refcounts_t *ref, struct references *result)
-+{
-+ const union _references op = { .references = { .weak = 1 } };
-+ union _references r;
-+ r.value = __atomic_sub_fetch (&ref->value, op.value, __ATOMIC_RELAXED);
-+ assert (r.references.weak != UINT32_MAX);
-+ if (result)
-+ *result = r.references;
-+}
-+
-+/* Store the current reference counts of REF in RESULT. This function
-+ uses atomic operations. It is not required to serialize calls to
-+ this function. */
-+static inline void
-+refcounts_references (refcounts_t *ref, struct references *result)
-+{
-+ union _references r;
-+ r.value =__atomic_load_n (&ref->value, __ATOMIC_RELAXED);
-+ *result = r.references;
-+}
-+
-+/* Return the hard reference count of REF. This function uses atomic
-+ operations. It is not required to serialize calls to this
-+ function. */
-+static inline uint32_t
-+refcounts_hard_references (refcounts_t *ref)
-+{
-+ struct references result;
-+ refcounts_references (ref, &result);
-+ return result.hard;
-+}
-+
-+/* Return the weak reference count of REF. This function uses atomic
-+ operations. It is not required to serialize calls to this
-+ function. */
-+static inline uint32_t
-+refcounts_weak_references (refcounts_t *ref)
-+{
-+ struct references result;
-+ refcounts_references (ref, &result);
-+ return result.weak;
-+}
-+
-+#endif /* _HURD_REFCOUNT_H_ */
---
-2.0.0.rc0
-