+ enum RequestType {
+ range_guarantee = ~0
+ };
+
+ struct BaseRequestObject;
+
+ struct InvalidationRecord {
+ std::list<BaseRequestObject*> requests;
+ PBD::EventLoop* event_loop;
+ const char* file;
+ int line;
+
+ InvalidationRecord() : event_loop (0) {}
+ };
+
+ static void* invalidate_request (void* data);
+
+ struct BaseRequestObject {
+ RequestType type;
+ bool valid;
+ InvalidationRecord* invalidation;
+ boost::function<void()> the_slot;
+
+ BaseRequestObject() : valid (true), invalidation (0) {}
+ };
+
+ virtual void call_slot (InvalidationRecord*, const boost::function<void()>&) = 0;
+ virtual Glib::Threads::Mutex& slot_invalidation_mutex() = 0;
+
+ std::string event_loop_name() const { return _name; }