about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/rt/util/indexed_list.h9
-rw-r--r--src/rt/util/synchronized_indexed_list.h16
2 files changed, 24 insertions, 1 deletions
diff --git a/src/rt/util/indexed_list.h b/src/rt/util/indexed_list.h
index cd39a0b60d7..b93945cc9cb 100644
--- a/src/rt/util/indexed_list.h
+++ b/src/rt/util/indexed_list.h
@@ -10,6 +10,15 @@ public:
     int32_t list_index;
 };
 
+template<typename T>
+class indexed_list_element : public indexed_list_object {
+public:
+    T value;
+    indexed_list_element(T value) : value(value) {
+        // Nop;
+    }
+};
+
 /**
  * An array list of objects that are aware of their position in the list.
  * Normally, objects in this list should derive from the base class
diff --git a/src/rt/util/synchronized_indexed_list.h b/src/rt/util/synchronized_indexed_list.h
index ca02f6efdd2..a7f79a74fa2 100644
--- a/src/rt/util/synchronized_indexed_list.h
+++ b/src/rt/util/synchronized_indexed_list.h
@@ -7,7 +7,14 @@ template<typename T> class synchronized_indexed_list :
     public indexed_list<T> {
     spin_lock _lock;
 public:
-    synchronized_indexed_list(memory_region &region) :
+    /**
+     * Clients can use this global lock that is associated with the list to
+     * perform more coarse grained locking. Internally, the synchronized list
+     * doesn'tactually make any use of this lock.
+     */
+    spin_lock global;
+
+    synchronized_indexed_list(memory_region *region) :
         indexed_list<T>(region) {
         // Nop.
     }
@@ -20,6 +27,13 @@ public:
         return index;
     }
 
+    bool pop(T **value) {
+        _lock.lock();
+        bool result = indexed_list<T>::pop(value);
+        _lock.unlock();
+        return result;
+    }
+
     size_t length() {
        size_t length = 0;
        _lock.lock();