summaryrefslogtreecommitdiffstats
path: root/src/server/Worker.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2016-07-31 23:00:45 -0400
committerDavid Robillard <d@drobilla.net>2016-07-31 23:00:45 -0400
commit7eb24a2761deb9604f1c6b813e6de69876088f9e (patch)
tree919062cdc82d8c6a0697249bf95e6668c19eae83 /src/server/Worker.hpp
parenta3b28f2924801bd59ea7924a652247269e6af928 (diff)
downloadingen-7eb24a2761deb9604f1c6b813e6de69876088f9e.tar.gz
ingen-7eb24a2761deb9604f1c6b813e6de69876088f9e.tar.bz2
ingen-7eb24a2761deb9604f1c6b813e6de69876088f9e.zip
Support thread-safe state restoration
Diffstat (limited to 'src/server/Worker.hpp')
-rw-r--r--src/server/Worker.hpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/server/Worker.hpp b/src/server/Worker.hpp
index 1cd6aff8..0a3fdeaf 100644
--- a/src/server/Worker.hpp
+++ b/src/server/Worker.hpp
@@ -1,6 +1,6 @@
/*
This file is part of Ingen.
- Copyright 2007-2015 David Robillard <http://drobilla.net/>
+ Copyright 2007-2016 David Robillard <http://drobilla.net/>
Ingen is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free
@@ -35,13 +35,17 @@ class LV2Block;
class Worker
{
public:
- Worker(Log& log, uint32_t buffer_size);
+ Worker(Log& log, uint32_t buffer_size, bool synchronous=false);
~Worker();
struct Schedule : public LV2Features::Feature {
+ Schedule(bool sync) : synchronous(sync) {}
+
const char* uri() const { return LV2_WORKER__schedule; }
SPtr<LV2_Feature> feature(World* world, Node* n);
+
+ const bool synchronous;
};
LV2_Worker_Status request(LV2Block* block,
@@ -59,8 +63,9 @@ private:
Raul::RingBuffer _responses;
uint8_t* const _buffer;
const uint32_t _buffer_size;
+ std::thread* _thread;
bool _exit_flag;
- std::thread _thread;
+ bool _synchronous;
void run();
};