32 #include <ardourext/misc.h>
37 DECLARE_DEFAULT_COMPARISONS(ptw32_handle_t)
42 template<
typename RequestBuffer>
void
45 RequestBuffer* rb = (RequestBuffer*) ptr;
64 template <
typename RequestObject>
77 template <
typename RequestObject>
void
86 if (target_gui !=
name()) {
119 request_buffers[thread_id] = b;
131 per_thread_request_buffer.
set (b);
134 template <
typename RequestObject> RequestObject*
153 if (vec.len[0] == 0) {
160 vec.buf[0]->type = rt;
161 vec.buf[0]->valid =
true;
172 RequestObject* req =
new RequestObject;
178 template <
typename RequestObject>
void
186 request_buffer_map_lock.lock ();
188 for (i = request_buffers.begin(); i != request_buffers.end(); ++i) {
202 i->second->get_read_vector (&vec);
204 if (vec.len[0] == 0) {
207 if (vec.buf[0]->valid) {
208 request_buffer_map_lock.unlock ();
209 do_request (vec.buf[0]);
210 request_buffer_map_lock.lock ();
211 if (vec.buf[0]->invalidation) {
212 vec.buf[0]->invalidation->requests.remove (vec.buf[0]);
215 i->second->increment_read_ptr (1);
223 for (i = request_buffers.begin(); i != request_buffers.end(); ) {
224 if ((*i).second->dead) {
230 request_buffers.erase (i);
237 request_buffer_map_lock.unlock ();
243 while (!request_list.empty()) {
244 RequestObject* req = request_list.front ();
245 request_list.pop_front ();
252 request_buffer_map_lock.lock ();
256 request_buffer_map_lock.unlock ();
265 if (req->invalidation) {
273 req->invalidation->requests.remove (req);
285 request_buffer_map_lock.unlock ();
312 template <
typename RequestObject>
void
320 if (base_instance() == 0) {
324 if (caller_is_self ()) {
356 request_list.push_back (req);
363 signal_new_request ();
367 template<
typename RequestObject>
void
370 if (caller_is_self()) {
396 req->invalidation = invalidation;
399 invalidation->
requests.push_back (req);
void send_request(RequestObject *)
static RequestType CallSlot
LIBPBD_API const char * pthread_name()
RequestObject * get_request(RequestType)
void register_thread(std::string, pthread_t, std::string, uint32_t num_requests)
std::list< BaseRequestObject * > requests
void cleanup_request_buffer(void *ptr)
PBD::ScopedConnection new_thread_connection
void set(size_t r, size_t w)
PBD::EventLoop * event_loop
#define DEBUG_TRACE(bits, str)
AbstractUI(const std::string &name)
static Glib::Threads::Private< RequestBuffer > per_thread_request_buffer
void call_slot(EventLoop::InvalidationRecord *, const boost::function< void()> &)
LIBPBD_API uint64_t AbstractUI
std::map< pthread_t, RequestBuffer * >::iterator RequestBufferMapIterator
void get_write_vector(rw_vector *)
void increment_write_ptr(size_t cnt)
RequestBuffer::rw_vector RequestBufferVector
void handle_ui_requests()
std::string string_compose(const std::string &fmt, const T1 &o1)
LIBPBD_API PBD::Signal4< void, std::string, pthread_t, std::string, uint32_t > ThreadCreatedWithRequestSize